【发布时间】:2017-08-22 06:33:04
【问题描述】:
首先,根据另一个SO post,我尝试将这两个语句合二为一。
<?php
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$sql = "UPDATE users SET pass = :password WHERE usrn = :id;
SELECT prim FROM users WHERE usrn = :id;";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":id", $_SESSION["idPersist"]);
$stmt->bindParam(":password", password_hash($_POST["password"], PASSWORD_DEFAULT));
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC); //// line 71
?>
但是,这一直抛出错误:Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error on line 71。
我找不到任何相关的解决方案来解决这个问题,所以我决定简单地将这两个语句分开。
<?php
$sql = "UPDATE users SET pass = :password WHERE usrn = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":id", $_SESSION["idPersist"]);
$stmt->bindParam(":password", password_hash($_POST["password"], PASSWORD_DEFAULT));
$stmt->execute();
$sql = "SELECT prim FROM users WHERE usrn = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":id", $_SESSION["idPersist"]);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION["session"] = $result["prim"];
?>
但是var_dump($result) 正在返回Bool(false),因此显然在这两种情况下都无法正常获取结果并将其存储为变量。
我是 PHP 和 MySQL 的新手,所以我现在很茫然。
【问题讨论】:
-
尝试使用 fetchAll 代替 fetch
-
@Akintunde 我会试试的,谢谢
-
@Akintunde fetch 确实有效。我只是错过了一个执行语句。我想我已经盯着屏幕太久了。我可以发誓我检查过:/有没有办法结合这两个陈述?
-
哦,哈哈,我什至没有发现。因为您的代码有点聚集。你是什么意思结合?你不能加入这两张桌子吗?数据库架构如何
-
如果您正在编码,请休息一下,当我进入超级驱动器时会出错,您使用什么 IDE 进行编码?
标签: php mysql pdo prepared-statement