これは少し奇妙で、これを完全に間違ってコーディングしている可能性があります。そのため、スクリプトのまったく異なる部分で、2 日間で 2 回同じエラーに遭遇したのです。私が使用しているコードは以下のとおりです。
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」を正確に出力します。行はデータベースに存在しますが、2 番目の行はvar_dump()
$results の呼び出しは何も出力しません。つまり、行は返されません。
単一の制約の配列を渡すと、たとえば
array( 'active' => 1 )
、これは完全に正常に機能します。複数の制約が渡されるたびに、機能しなくなるようです。