Проблем с PDO

purko

Registered
Код:
$sql = "SELECT * FROM happy_numbers WHERE id='$id'";
			foreach ($dbh->query($sql) as $row){
				print $row['ip'] .' - '. $row['result'] . '<br />';
			}

Защо това ми дава грешка
Fatal error: Call to a member function query() on a non-object in D:\codes\xampp\htdocs\php\index.php on line 51

Връзката към базата си е добре, защото вкарвам данни, ама не мога да изкарам данни... :o
 
Проблемът идва от там, че $dbh не ти е инстанция на PDO! Виж да не си предефинирал променливата или да е извън обхват?
Използваш var_dump за да видиш дали е инстанция на PDO или не.
 
define('DB_NAME','tirira');
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PASS','');
define('DB_DSN', sprintf('mysql:host=%s;dbname=%s', DB_HOST, DB_NAME));
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
$dbh = new PDO(DB_DSN, DB_USER, DB_PASS);


$action = (int) $_GET['action'];
$ip = $_SERVER['REMOTE_ADDR'];
function show(){
if($_SESSION['moi_chisla'] != null){
$raz = explode(" ", $_SESSION['moi_chisla']);
foreach($raz as $v){
$id = $v;
$sql = "SELECT * FROM happy_numbers WHERE id='$id'";
foreach ($dbh->query($sql) as $row){
print $row['ip'] .' - '. $row['result'] . '<br />';
}
}
}
}

Как да проверя дали съм я предифинирал? :D
 
Виж сега. Видях къде е грешката ти. Трябва да прочетеш малко за обхват (scope) на променливите. Ти си дефинирал променливата $dbh в main scope-a. Това е главното ти именовано пространство в твоя PHP код. Всяка функция си има свое именовано пространство. Затова, когато от функция искаш да извикаш променлива, която си дефинирал извън нея, правиш така: в началото на функцията пишеш global $dbh; и вече спокойно можеш надолу да си я използваш :)
 
F1r3Fl3x каза:
Виж сега. Видях къде е грешката ти. Трябва да прочетеш малко за обхват (scope) на променливите. Ти си дефинирал променливата $dbh в main scope-a. Това е главното ти именовано пространство в твоя PHP код. Всяка функция си има свое именовано пространство. Затова, когато от функция искаш да извикаш променлива, която си дефинирал извън нея, правиш така: в началото на функцията пишеш global $dbh; и вече спокойно можеш надолу да си я използваш :)
Мда... схванах. Мерси много.
 

Back
Горе