【发布时间】:2016-09-27 01:01:58
【问题描述】:
目前要使用 PDO 执行查询,我使用以下代码行:
$sql = "SELECT * FROM myTable WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
经过一番研究,我发现了一种执行相同命令的更短方法:
$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$stmt_test->execute([$id])->fetchAll(PDO::FETCH_ASSOC);
$result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);
从那里我认为我可以使用以下代码使其更短:
$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result = $stmt_test->execute([$id])->fetchAll(PDO::FETCH_ASSOC);
但我收到以下错误:
致命错误:在非对象上调用成员函数 fetchAll() /home/.../index.php 第 20 行
问题:为什么会出现此错误?据我了解,$stmt_test->execute([$id]) 应该首先执行,然后其结果将执行->fetchAll(PDO::FETCH_ASSOC) 并从那里将数组返回到$result,但是由于发生了错误,所以我的逻辑一定有缺陷。我究竟做错了什么?另外,有谁知道执行上一个查询的更好的速记方法吗?
【问题讨论】:
-
@johannes 虽然错误名称相似,但导致错误的情况不同。
-
啊,看的不够仔细,下面回答。
-
@johannes 一切都好 :)