这有点奇怪,我很可能完全错误地编写了这个代码 - 因此我在两天内两次在脚本的完全不同部分遇到了相同的错误。我正在使用的代码如下:
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 )
,这工作得很好。似乎只要通过了多个约束,它就会停止工作。