使用php和mysql迭代PDO查询

时间:2012-05-29 10:53:16

标签: php mysql database pdo

我有这个问题,我无法弄清楚, 我这样查询数据库:

$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之间的区别?我应该使用哪个?

这是数据库架构:

+---------------+--------------+------+-----+---------+-------+
| 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    |       |
+---------------+--------------+------+-----+---------+-------+

感谢名单!

编辑:修正了错字。

2 个答案:

答案 0 :(得分:3)

您应该添加if条件以检查记录是否存在。

$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的拼写错误。

答案 1 :(得分:0)

错字?它不应该是$cname->customer_name而不是$c_name->customer_name吗?

修改

具体而言,您将退货对象分配给$cname

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

但你在下一行指的是$c_name

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