0

我有这个我无法弄清楚的问题,我以这种方式查询数据库:

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

谢谢!

编辑:修正了一个错字..

4

2 回答 2

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.

于 2012-05-29T10:58:24.083 回答
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);
于 2012-05-29T11:00:12.027 回答