BindParam PHP yazılmadan ile hata

1 Cevap php

Bu garip bir birinin biraz, ve ben de bu tamamen yanlış kodlama olabilir - dolayısıyla ben bir komut dosyası tamamen farklı yerlerinde, iki gün içinde iki kez aynı hatayı isabet ettik neden. Ben kullanıyorum kod aşağıda:


    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); } }

Ben PDO kullanarak için oldukça yeni, ama temelde kısıtlamaları bir dizi geçmek için çalışılıyor, örneğin

array( 'active' => 1, 'name' => 'James' ) 
and return all rows from the table
WHERE active = 1 AND name = 'James' 

Ben bu diziyi, $ sonuçları çıkışlar boşuna ilk

var_dump( ) 
is
SELECT * FROM {table} WHERE active = :active AND name = 'James' 
- exactly as I expect. The bound parameters prints 'Binding active to 1' and 'Binding name to James' - exactly as expected. The rows exist in the database, and yet the second
var_dump()  çağrısından idam SQL kullanıyorsanız - yani hiçbir satır döndürülür.

Ben bir tek kısıtlaması bir dizi başarılı olursa, mesela

array( 'active' => 1 ) , bu mükemmel çalışıyor. Birden kısıtlamaları olarak durması geçirilen zaman gibi görünüyor.