这是我的PHP sql语句,它在var转储时返回false
$password_md5 = md5($_GET['password']);
$sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password, password_plain) VALUES (:fullname, :email, :username, :password, :password_plain)');
$result = $sql->execute(array(
':fullname' => $_GET['fullname'],
':email' => $_GET['email'],
':username' => $_GET['username'],
':password' => $password_md5,
':password_plain' => $_GET['password']));
Run Code Online (Sandbox Code Playgroud) 目前要使用PDO执行查询,我使用以下代码行:
$sql = "SELECT * FROM myTable WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)
经过一些研究,我找到了一种执行相同命令的简短方法:
$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);
Run Code Online (Sandbox Code Playgroud)
从那里我想我可以使用以下代码缩短它:
$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result = $stmt_test->execute([$id])->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
致命错误:在第20行的/home/.../index.php中的非对象上调用成员函数fetchAll()
问题:为什么我收到此错误?从我的理解,$stmt_test->execute([$id])应该首先执行,然后结果将执行->fetchAll(PDO::FETCH_ASSOC)和从那里返回数组$result,但由于错误发生,我的逻辑中必须有一些缺陷.我究竟做错了什么?此外,有没有人知道一个更好的速记方法来执行以前的查询?