php - 合并两个准备好的语句不起作用

标签 php mysql pdo prepared-statement

首先,根据另一个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 :未捕获的 PDOException:SQLSTATE[HY000]:第 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 的新手,所以我现在很茫然。

最佳答案

改变这个,

$sql  = "SELECT prim FROM users WHERE usrn = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":id", $_SESSION["idPersist"]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION["session"] = $result["prim"];

对此,

$sql  = "SELECT prim FROM users WHERE usrn = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":id", $_SESSION["idPersist"]);
$stmt->execute(); // Your problem
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION["session"] = $result["prim"];

您错过了查询的执行。

关于php - 合并两个准备好的语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45810415/

相关文章:

php - 由于 Yii 中的负载均衡器, Assets URL 不工作

PHPExcel Reader 抛出异常

Mysql 拆分行到 INSERT

php - 为什么这个 PDO 语句会默默地失败?

php - 如何使 PDO (pdo_pgsql) 延迟获取行

php - mysql:如何对表中的2个字段求和并将结果放在第3个字段中?

PHP无需等待即可执行外部脚本,同时传递变量

php - 返回的 php DateTime 有什么问题?

javascript - 数据库条目中的 html 标签未呈现为 html

php - 在插入 MySQL 之前使用 htmlspecialchars() 好吗?