【问题标题】:PHP PDO Invalid parameter number: number of bound variables does not match number of tokensPHP PDO 参数号无效:绑定变量的数量与标记的数量不匹配
【发布时间】:2014-03-13 09:48:13
【问题描述】:

我确定这很明显,但我看不出下面的代码有什么问题:

$sSQl="SELECT nDocumentID, sFilename, sDescription 
    FROM tCompanyDocuments 
    WHERE nCompanyID=:nCompanyID AND sDocumentType='I' ORDER BY nDisplayOrder";
$objQuery=$objConn->prepare($sSQL);
$objQuery->bindParam(':nCompanyID', $arrResult['nCompanyID']);
if ($objQuery->execute()) {
    $arrTemp=$objQuery->fetchAll(PDO::FETCH_ASSOC);
    if (sizeof($arrTemp)>0) {
        foreach ($arrTemp as $objRow) {
            //do stuff
        }
    }
}

错误消息是“Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in {filename}”,引用的行是 $ objQuery->execute()

我已确认已填充 $arrResult['nCompanyID'] - 我看不到什么?

谢谢

【问题讨论】:

  • 先用空格分隔=和col/token:nCompanyID = :nCompanyID,然后你可以试试binValue而不是php.net/manual/en/pdostatement.bindvalue.php
  • 感谢 Royal BG - 但我已经尝试了这两个建议 - 没有任何变化。

标签: php pdo


【解决方案1】:

您如何验证 $arrResult['nCompanyID'] ? 查询似乎运行良好并返回结果。我猜是 $arrResult['nCompanyID'] 是空的。

【讨论】:

  • 谢谢 lu - 当我在查询之前输出这个时,它确实显示了预期的数字 (16)...
  • 此外,还有 sSQ[L] 和 sSQ[l]。也许没什么重要的,但...尝试将 sSQL 更改为大写“L”
  • 就是这样 - PHP 区分大小写,所以我加载了错误的查询!谢谢卢
【解决方案2】:

试试这个:

$sSQl="SELECT nDocumentID, sFilename, sDescription 
    FROM tCompanyDocuments 
    WHERE nCompanyID = :nCompanyID AND sDocumentType='I' ORDER BY nDisplayOrder";

如果 nCompanyID 是整数类型,则:

 $objQuery->bindParam(':nCompanyID', $arrResult['nCompanyID'], PDO::PARAM_INT);

 $objQuery->bindParam(':nCompanyID', $arrResult['nCompanyID'], PDO::PARAM_STR,Length of string);

See details

【讨论】:

  • 谢谢 Awlad - 但我尝试添加 PDO::PARAM_INT 并没有任何改变。
  • 您似乎跳过了其他一些 php 脚本。这里应该没有什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多