PDOException'参数号无效:未定义参数

时间:2015-10-09 16:25:50

标签: php mysql pdo

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

$( document ).on( 'keydown', function ( e ) {
    if (e.keyCode===13){
        if($('textarea', this).val().length <= 5 && !event.shiftKey){
            $('textarea').toggleClass("t_border");
            setTimeout( function(){$('textarea').toggleClass("t_border");}, 400);   
            return false;         
        }  
   }
});

Echo系列给了我。

$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

1 个答案:

答案 0 :(得分: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]));