【问题标题】:PHP PDO: Can't bind value to multiple variables?PHP PDO:无法将值绑定到多个变量?
【发布时间】:2019-09-16 22:27:59
【问题描述】:

我正在尝试执行一个查询,该查询通过以下查询使用相同的外键连接多个表,但它返回 false。

$question_id = 11406;

$query = $db->prepare("SELECT q.question_attempts_permitted, q.question_range, a.answer_text, r.attempt_count 
                           FROM checkup_questions q, checkup_answers a, user_responses r 
                           WHERE a.question_id=:question_id AND q.question_id=:question_id AND r.question_id=:question_id");
$query->bindValue(':question_id', $question_id, PDO::PARAM_INT);
$query->execute();

但是,如果我直接注入 question_id,查询将返回所需的结果。

$query = $db->prepare("SELECT q.question_attempts_permitted, q.question_range, a.answer_text, r.attempt_count 
                       FROM checkup_questions q, checkup_answers a, user_responses r 
                       WHERE a.question_id=11406 AND q.question_id=11406 AND r.question_id=11406");
$query->execute();

bindValue 接口是否存在一些限制导致第一个查询失败而第二个查询按预期返回?

【问题讨论】:

  • 您不能多次使用同一个占位符。句号。
  • 啊好的。那么如何处理像上面的例子一样需要多次引用同一个值的情况呢?
  • 使用不同的占位符,不是吗?或查询中的正确JOIN。
  • 在这种特殊情况下:WHERE a.question_id=:question_id AND q.question_id=a.question_id AND r.question_id=a.question_id。虽然你应该使用JOIN 语法 - 那么解决方案可能很明显。
  • @PaulSpiegel - 谢谢我现在看到了这个问题。

标签: php mysql pdo


【解决方案1】:

查询文本应使用JOIN重写:

$query = $db->prepare("
    SELECT q.question_attempts_permitted, q.question_range, a.answer_text, r.attempt_count 
    FROM checkup_questions q 
    JOIN checkup_answers a ON a.question_id = q.question_id
    JOIN user_responses r ON r.question_id = q.question_id
    WHERE q.question_id=:question_id
");
// you can provide placeholder without `:`
$query->bindValue('question_id', $question_id, PDO::PARAM_INT);
$query->execute();

这里只有一个占位符。

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多