【问题标题】:Invalid parameter number: parameter was not defined in {path} [duplicate]参数号无效:{path} 中未定义参数 [重复]
【发布时间】:2017-12-12 03:17:38
【问题描述】:

这是我的查询:

SELECT qa.id,
       qa.subject,
       qa.category cat,
       qa.keywords tags,
       qa.body_html,
       qa.amount,
       qa.author_id author,
       qa.visibility,
       qa.date_time,
       COALESCE(u.reputation, 'N') reputation,
       COALESCE(CONCAT(u.user_fname, ' ', u.user_lname), 'ناشناس') name,
       COALESCE(u.avatar, 'anonymous.png') avatar,

  (SELECT COALESCE(sum(vv.value),0)
   FROM votes vv
   WHERE qa.id = vv.post_id
     AND 15 = vv.table_code) AS total_votes,

  (SELECT COALESCE(sum(vt.total_viewed),0)
   FROM viewed_total vt
   WHERE qa.id = vt.post_id
     AND 15 = vt.table_code
   LIMIT 1) AS total_viewed
FROM qanda qa
INNER JOIN qanda_tags qt ON qt.qanda_id = qa.id
INNER JOIN tags ON tags.id = qt.tag_id
LEFT JOIN users u ON qa.author_id = u.id
AND qa.visibility = 1
WHERE qa.type = 0
  AND tags.name = :t
ORDER BY total_votes DESC,
         qa.id DESC
LIMIT :j,
      11;

这是print_r() 参数数组的结果:(我将它作为execute() 参数传递给查询)

Array ( [:t] => برچسب1 [:j] => 0 )

当我执行查询时,它会抛出这个错误:

致命错误: 未捕获的 PDOException:SQLSTATE[HY093]:无效参数编号:参数未在 C:\xampp\htdocs\myweb\others\questions.php:140 堆栈跟踪:# 0 C:\xampp\htdocs\myweb\others\questions.php(140): PDOStatement->execute(Array) #1 C:\xampp\htdocs\myweb\application\other.php(21): questions->index () #2 C:\xampp\htdocs\myweb\index.php(149): require_once('C:\xampp\htdocs...') #3 {main} 在 C:\xampp\htdocs\myweb\ 中抛出第 140 行的 others\questions.php

谁能找到问题?我盯着它看了 1 个小时,对我来说似乎很好。

【问题讨论】:

  • 我们能看到你绑定参数的代码吗

标签: php mysql pdo parameters


【解决方案1】:

你应该使用

 array( ':t' => برچسب1 ':j' => 0 )

【讨论】:

    【解决方案2】:

    您可能会在 PDO 模拟参数的方式上遇到问题。

    在这里查看我的答案:Parametrized PDO query and `LIMIT` clause - not working

    所以你应该关闭模拟参数:

    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    

    否则您必须绑定一个 PHP 整数,并将其指定为整数:

    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
    ...
    $stmt->bindValue('j', (int) $int, PDO::PARAM_INT);
    

    【讨论】:

      猜你喜欢
      • 2016-06-14
      • 2017-06-10
      • 1970-01-01
      • 2018-06-15
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 2016-02-05
      相关资源
      最近更新 更多