【问题标题】:PDOException' Invalid parameter number: parameter was not definedPDOException' 参数号无效:参数未定义
【发布时间】:2015-10-09 16:25:49
【问题描述】:

我认为这应该是一个简单的问题,但我看不到。

$SQL = "Select `id` from `fileStore` WHERE `uid` = ':UID' and `offset` = :OFFSET";
$InPut = array(':UID' => $LocArr[0],':OFFSET' => $LocArr[1]);
echo(str_replace(array_flip($InPut),$InPut,$SQL));
$stmt = $db->prepare($SQL);
$stmt->execute($InPut);

回声线给了我。

Select `id` from `fileStore` WHERE `uid` = '20151009162211-909549588' and `offset` = 1

我可以针对数据库运行。但我得到了错误。

Fatal error: 
Uncaught exception 'PDOException' with message 
'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' 
in filepath\UploadParser.php:
117 Stack trace: #0 filepath\UploadParser.php(117): 
PDOStatement->execute(Array) #1 {main} thrown in filepath\UploadParser.php on line 117

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    在您的查询中,您引用了第一个占位符,这使它成为一个字符串。当执行被触发时,PDO 会感到困惑,因为您告诉它有两个占位符,但它只找到一个(未引用的那个)。

    尝试解决该问题

    $SQL = "Select `id` from `fileStore` WHERE `uid` = :UID and `offset` = :OFFSET";
    $InPut = array(':UID' => $LocArr[0],':OFFSET' => $LocArr[1]);
    $stmt = $db->prepare($SQL);
    $stmt->execute($InPut);
    

    当它进入数据库时​​,这应该使:UID = $LocArr[0]:OFFSET = $LocArr[1]

    您似乎还试图用查询中的实际值替换占位符,这是您不应该做的。这消除了准备好的语句的目的。

    另一种写法是

    $SQL = "Select `id` from `fileStore` WHERE `uid` = ? and `offset` = ?";
    $stmt = $db->prepare($SQL);
    $stmt->execute(array($LocArr[0], $LocArr[1]));
    

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 2016-03-13
      • 1970-01-01
      • 2016-02-05
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多