mysql hy093_Warning: PDOStatement::bindValue(): SQLSTATE[HY093]: Invalid parameter number: Columns/P...

问题

I'm trying to make a query function as follow :

public function Query( $sql, $params = array() ) {

$this->error = false;

if ( $this->query = $this->pdo->prepare( $sql ) ) {

for ( $i = 0, $size = count( $params ); $i < $size; $i ++ ) {

echo $i;

$this->query->bindValue( $i, $params[ $i ] );

}

if ( $this->query->execute() ) {

echo 'suc';

}

}

}

and call it like this :

$mysql->Query( "SELECT * FROM `client_info` WHERE `name` = ? AND `password`= ?", array(

'test',

'test'

) );

and the result is :

Warning: PDOStatement::bindValue(): SQLSTATE[HY093]: Invalid parameter number: Columns/Parameters are 1-based

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

I have no clue what's wrong here , everything supposed to be fine and it should work!!

回答1:

$i = 0

And

Warning: PDOStatement::bindValue(): SQLSTATE[HY093]: Invalid parameter number: Columns/Parameters are 1-based

Compare those two things, you will notice that your $i has to start at 1, not 0.

This can also be confirmed from the PHP Manual

parameter

Parameter identifier. For a prepared statement using named placeholders, this will be a parameter name of the form :name. For a prepared statement using question mark placeholders, this will be the 1-indexed position of the parameter.

回答2:

You can also get this issue when you do something as simple as having a messed up abstraction function and you end up passing an array to the bindValue() when it should be a string, as in:

$a = array(':slug','mickey1');

$st = $PDO->prepare($sSQL);

$st->bindValue(':slug',$a); // the bug!

In my case, I should have made $a as array(':slug' => 'mickey1') and should have iterated my array so that I could bindValue() by each string key of the associative array.

来源:https://stackoverflow.com/questions/28124598/warning-pdostatementbindvalue-sqlstatehy093-invalid-parameter-number-c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值