PDO不识别参数

时间:2015-09-11 12:32:42

标签: php mysql pdo parameters

我有这个问题:

INSERT INTO user ( username , password , role )
SELECT
  CONCAT( :username1 , "-" , ABS( REPLACE( (
    SELECT username FROM user
    WHERE username LIKE :username2
    ORDER BY ID DESC LIMIT 1
  ), :username3, "" ) ) + 1 ) AS username,
  :password,
  :role

在php中我有这个用于绑定值的代码:

$dbp = $db->prepare( $query );
for( $i = 1 ; $i <= 3 ; $i++ ){
        $dbp->bindValue( ':username' . $i , ( $i == 2 ? 'test%' : 'test' ) );
}
$dbp->bindValue( ':password' , '0' );
$dbp->bindValue( ':role' , 'test' );
$dbp->execute();

我在查询中有5个参数:

:username1 , :username2 , :username3 , :password , :role

并为每个人分配了bindValue函数。

Hovewer它会触发此错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]:
Invalid parameter number: parameter was not defined' in [...]
PDOStatement->bindValue(':username1', 'test') #1 {main} thrown in [...]

但参数确实存在于我的查询和for循环中。我不能在CONCAT函数中使用参数吗?

然而,

This链接对我没有帮助:

  

1):参数名称与错误绑定不匹配(拼写错误?)

正如我所说,每个参数都匹配:我在每个bindValue之前回显,并且每个参数都写得正确。

  

2)完全忘记添加bindValue()

5个参数,5个bindValues,5个具有正确匹配的回声

第三点不是我的问题。

1 个答案:

答案 0 :(得分:2)

此网站上已有hundreds similar questions他们中没有一个人发现了一些关于PDO绑定的神秘信息。所有这些都是由一个简单的排版错误引起的。没有例外。

您可以在查询的任何部分使用参数,只要它表示完整和单个数据文字。