我有这个问题,我无法弄清楚, 我这样查询数据库:
$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 | |
+---------------+--------------+------+-----+---------+-------+
感谢名单!
编辑:修正了错字。
答案 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);