Autor Zpráva
luma64
Profil
Zdravím, prechádzam z php ver 5.x na verziu php7. V kóde pre php7, musím urobiť mnoho zmien.
Teraz som narazil na problém, ktorý súvisí s vytvorením pripojnenia na databázu prostredníctvom PDO nasledovne:

V sample.php mam takýto kód (jeho časť)
<?php

session_start();  
error_reporting(~E_NOTICE); 

//Include database connection details
require_once('php/dbconfig.php');



$uziv  = $_SESSION['SESS_UZIV_ID'] ;
echo "uziv: $uziv";
.
.
?>

Volaný dbconfig.php :
<?php
session_start(); 
error_reporting(~E_NOTICE); 
require_once('config.php');

define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'nejaka_db');

class DBConnection
{
    function getConnection()
    {
        $dsn = 'mysql:dbname=' . DB_DATABASE . ';host=' . DB_HOST . '';
        $user = DB_USER;
        $password = DB_PASSWORD;

        try
        {
        $pdo = new PDO($dsn, $user, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->exec("set names utf8");
        }
        catch (PDOException $e)
        {
        die('Connection failed: ' . $e->getMessage());
        }
    }
}
?>
Pri vykonávaní príkazu v sample.php
    $sql = "select datum from prackalendar  where pracden='ANO' and datum >'$dnes' Limit 1";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $row = $stmt->fetch();
    $bud_prac_den =  $row[0];

odbržím chybu :

Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\operacie\sample.php:337
Stack trace:
#0 {main}
thrown in <b>C:\xampp\htdocs\test\sample.php</b> on line <b>337</b><br />

Kde je prosím Vás problém ? Vychádza to tak, ze pdo nie je rozpoznané v sample.php ? Vďaka !
Tomášeek
Profil
luma64:
$pdo je null, čili neexistuje. Čemu nerozumíš? Nápověda, kontext funkce.
luma64
Profil
Prečo nadobúda hodnotu null ? V iných stránkach mi tento kód je správne vykonávaný, je však obsiahnutý tam, kde sú všetky sql príkazy.
V príklade, ktorý som popísal je však v inej stránke - táto je includovaná. Tam sa vykoná aj pripojenie na databázu správne. Po tomto procese, keď sa vráti naspäť, pdo má hodnotu null().
blaaablaaa
Profil
luma64:
Protože proměnná $pdo existuje jen v rámci metody getConnection.


OT, takový dotaz neřeší sql injection, je potřeba pdo použít nějak takto (pdo nepoužívám, tak neručím za správnost):
$sql = "select datum from prackalendar  where pracden='ANO' and datum >:datum Limit 1";
    $stmt = $pdo->prepare($sql);
    $stmt->bind_param(':datum', $datum);
    $stmt->execute();
Keeehi
Profil
luma64:
Jinak tato chyba nesouvisí se změnou verze. V PHP 5 bys měl stejný problém.
luma64
Profil
Keeehi:
Ja si myslím, že problém je v tom, že pdo je null() a musím sa vydať týmto smerom, ako to popísal Tomášek. V iných stránkach, kde mám použité pdo a connection je vytváraná priamo v nej a nie je volaná includom, čo je tento prípad, kód a sql príkazy sa vykonávajú správne. Správne v php7 a php5.
blaaablaaa
Profil
luma64:
Včera, 14:36:14, jsem ti napsal, proč to je.
luma64
Profil
Samozrejme. pomylil som sa v mene užívateľa.
Keeehi
Profil
luma64:
Ja si myslím, že problém je v tom, že pdo je null() a musím sa vydať týmto smerom
To máš naprostou pravdu. Já to psal jen proto, abys náhodou nehledal jaký je rozdíl ve fungování funkcí/metod mezi PHP 5 a 7. Protože v tomto ohledu fungují stejně a žádné rozdíly bys nenašel. Tedy že ten problém je na verzi PHP úplně nezávislý.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0