当前位置:  开发笔记 > 编程语言 > 正文

在PHP中使用bindParam覆盖时出错

如何解决《在PHP中使用bindParam覆盖时出错》经验,为你挑选了1个好方法。

这是一个有点怪异的一个,我可以很好地编码这完全错了 - 因此,为什么我已经打了同样的错误两次在两天内,在脚本中的完全不同的部分.我正在使用的代码如下:

    public function findAll( $constraints = array() ) {

        // Select all records
        $SQL = 'SELECT * FROM ' . $this->tableName;

        // See if there's any constraints
        if( count( $constraints ) > 0 ) {
            $SQL .= ' WHERE ';

            foreach( $constraints as $field => $value ) {
                $SQL .= $field . ' = :' . $field . ' AND ';
            }

        }

        // Remove the final AND and prepare the statement
        $SQL = substr( $SQL, 0, -5 );       
        $PDOStatement = $this->PDO->prepare( $SQL );

        // Loop through constraints and bind parameters
        foreach( $constraints as $field => $value ) {
            print 'Binding ' . $field . ' to ' . $value . ' 
'; $PDOStatement->bindParam( $field, $value ); } $PDOStatement->execute(); var_dump($PDOStatement); while ( $results = $PDOStatement->fetch( PDO::FETCH_ASSOC ) ) { var_dump($results); } }

我对使用PDO很新,但基本上我试图传递一系列约束,例如

array( 'active' => 1, 'name' => 'James' )
并返回表中的所有行
WHERE active = 1 AND name = 'James'

如果我使用这个数组,则从第一个执行SQL

var_dump( )
SELECT * FROM {table} WHERE active = :active AND name = 'James'
- 完全符合我的预期.绑定参数打印'Binding active to 1'和'Binding name to James' - 完全符合预期.行存在于数据库中,而第二行
var_dump()
调用$ results输出什么 - 即没有返回任何行.

如果我传递一个单一约束的数组,例如

array( 'active' => 1 )
,这很好用.似乎只要传递多个约束,它就会停止工作.



1> troelskn..:

那是因为bindParam通过绑定到变量来工作,并且您正在$value为多个值重用变量().试着bindValue改为.

或者甚至更好; 将值作为数组传递给execute.这使得语句无状态,这在编程中通常是一件好事.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有