Autor | Zpráva | ||
---|---|---|---|
luma64 Profil |
#1 · Zasláno: 10. 1. 2019, 14:13:29
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()); } } } ?> $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 |
#2 · Zasláno: 10. 1. 2019, 14:18:53
luma64:
$pdo je null , čili neexistuje. Čemu nerozumíš? Nápověda, kontext funkce.
|
||
luma64 Profil |
#3 · Zasláno: 10. 1. 2019, 14:27:34
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 |
#5 · Zasláno: 10. 1. 2019, 18:45:46
luma64:
Jinak tato chyba nesouvisí se změnou verze. V PHP 5 bys měl stejný problém. |
||
luma64 Profil |
#6 · Zasláno: 11. 1. 2019, 07:26:27
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 |
#7 · Zasláno: 11. 1. 2019, 08:02:09
luma64:
Včera, 14:36:14, jsem ti napsal, proč to je. |
||
luma64 Profil |
#8 · Zasláno: 11. 1. 2019, 08:13:47
Samozrejme. pomylil som sa v mene užívateľa.
|
||
Keeehi Profil |
#9 · Zasláno: 11. 1. 2019, 09:30:35
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ý. |
||
Časová prodleva: 5 let
|
0