目前,为了使用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);
但我遇到了以下错误:
致命错误:在第20行的/home/.../index.php上调用一个非对象的成员函数fetchAll()
问题:为什么会出现这个错误?在我的理解中,$stmt_test->execute([$id])
应该首先执行,然后执行 ->fetchAll(PDO::FETCH_ASSOC)
并将数组返回给 $result
,但由于出现了错误,我的逻辑肯定有问题。我做错了什么?此外,有没有更好的缩写方法来执行前面的查询?