2012-05-29 2 views
0

У меня есть эта проблема, я не могу понять, я запрашиваю БД так:Итерация PDO запросов с PHP и MySQL

$stmt = $this->pdo->prepare('SELECT customer_name FROM active_users WHERE a_id= ?'); 
$stmt->execute(array($a_id)); 
$c_name = $stmt->fetch(PDO::FETCH_OBJ); 
API::writeToLog('CMD=leave , Customer_Name = ' . $c_name->customer_name, $customer_name); 

Это: $ c_name-> customer_name дает следующее сообщение об ошибке:

Notice: Trying to get property of non-object 

Как я могу перебирать свою базу данных и каково различие между fetch и fetchAll? который я должен использовать?

Это DB схема:

+---------------+--------------+------+-----+---------+-------+ 
| Field   | Type   | Null | Key | Default | Extra | 
+---------------+--------------+------+-----+---------+-------+ 
| a_id   | varchar(40) | NO | PRI | NULL |  | 
| token   | varchar(64) | NO |  | NULL |  | 
| nick   | varchar(255) | NO |  | NULL |  | 
| ip   | varchar(32) | NO |  | NULL |  | 
| customer_name | varchar(255) | YES |  | NULL |  | 
+---------------+--------------+------+-----+---------+-------+ 

спасибо!

EDIT: исправлена ​​опечатка ..

ответ

3

Вы должны добавлять, если условие, чтобы проверить, существует ли запись.

$stmt = $this->pdo->prepare('SELECT customer_name FROM active_users WHERE udid = ?'); 
$stmt->execute(array($udid)); 
if ($c_name = $stmt->fetch(PDO::FETCH_OBJ)) { 
    API::writeToLog('CMD=leave , Customer_Name = ' . $c_name->customer_name, $customer_name); 
} 

Для fetchAll, он возвращает все записи сразу.

Как указано в @Darragh, у вас есть опечатка для $c_name.

+0

+1 всегда хорошая практика, чтобы проверить возвращаемые значения присваивания –

+0

при использовании fetchВсе вот так: $ messages = $ stmt-> fet Chall (PDO :: FETCH_OBJ); следует ли использовать «if» для проверки возвращаемого значения? если так, то итерация по объектам pdo будет следующей? : foreach ($ messages as $ message) {...} – Li3ro

+0

@ Li3ro Вам просто нужно перебрать его. – xdazz

0

Typo? Не должно быть $cname->customer_name вместо $c_name->customer_name?

EDIT

Чтобы быть конкретным, вы assiging ваше возвращение объекта $cname:

$cname = $stmt->fetch(PDO::FETCH_OBJ); 

Но вы имеете в виду $c_name на следующей строке:

API::writeToLog('CMD=leave , Customer_Name = ' . $c_name->customer_name, $customer_name); 
+0

Вы правы, его опечатка при редактировании вопроса, а не в коде .. sry – Li3ro

+0

Нет проблемa! :) –

Смежные вопросы