【问题标题】:PDO Parameter binding causes exceptionPDO 参数绑定导致异常
【发布时间】:2014-06-27 07:32:08
【问题描述】:

我正在尝试绑定一个参数,以便我可以基于WHERE 子句查询数据库,该子句检查存储在SESSION 中的用户用户名。用户名肯定存储在会话中,因为当我 var_dump($_SESSION) 时我可以看到它,所以我知道这是问题的原因。

我没有得到返回的 id,而是得到了异常。例如,当我将:user 更改为'Maverick' 时(显然是来自数据库的有效用户名),它将返回ID。有什么想法吗?

$username = $_SESSION['username'];

try {
    $result = $db->query("SELECT id FROM user_info WHERE username = :user");
    $result->bindParam(':user', $username);
    $result->execute();
    $user_info = $result->fetchAll(PDO::FETCH_ASSOC);
} 

catch (Exception $e) {
    echo "Could not retrieve user's ID";
    exit;
}

不确定它有多相关,但是当我实际上将 :user 替换为 Maverick 然后执行 echo $user_info 时,它不会返回任何内容,但是当我执行 var_dump($user_info); 时,它会显示以下内容; array(1) { [0]=> array(1) { ["id"]=> string(2) "59" } }

我想我的问题在技术上是一个两部分的问题。非常感谢您的帮助。

【问题讨论】:

  • 在你的catch块中,输入echo $e->getMessage();看看错误是什么。
  • 谢谢,这真的很有用!为了测试getMessage,我将prepare 改回来,它告诉我错误是什么,正如您所期望的那样。很棒的小工具包。

标签: php mysql session pdo


【解决方案1】:

您需要在此处更改查询以反映每个文档的 pdo 绑定参数结构
http://www.php.net//manual/en/pdostatement.bindparam.php

$username = $_SESSION['username'];

try {
    $result = $db->prepare("SELECT id FROM user_info WHERE username = :user");
    $result->bindParam(':user', $username);
    $result->execute();
    $user_info = $result->execute();
} 

catch (Exception $e) {
    echo "Could not retrieve user's ID";
    exit;
}

【讨论】:

    【解决方案2】:

    我想你想要prepare() 而不是query()

    $result = $db->prepare("SELECT id FROM user_info WHERE username = :user");
    $result->bindParam(':user', $username);
    $result->execute();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多