相关疑难解决方法(0)

我的PDO声明不起作用

这是我的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)

php mysql pdo

37
推荐指数
1
解决办法
7740
查看次数

简写PDO查询

目前要使用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,但由于错误发生,我的逻辑中必须有一些缺陷.我究竟做错了什么?此外,有没有人知道一个更好的速记方法来执行以前的查询?

php mysql pdo

2
推荐指数
1
解决办法
927
查看次数

标签 统计

mysql ×2

pdo ×2

php ×2