2009-04-01 6 views
0

Bonjour, j'essaie de créer une fonction pour générer des fonctions sélectionnées.php select function génère bizarre where clause

Mais le code suivant

public function select($psTableName, $paFields ="",$paWhere=array()) 
{ 
    //initial return value 
    $lbReturn = false; 
    try 
    { 
     $lsQuery = "SELECT * FROM `"; 
     $lsQuery .= $psTableName; 
     $lsQuery .= "` "; 
     if (!empty($paWhere)){ 
       $lsQuery .= "WHERE "; 
       print_r($paWhere); 
       foreach($paWhere as $lsKey => $lsValue) 
       { 
        echo $lsKey."<br>"; 
        $paWhere[] = $lsKey." = '".mysql_real_escape_string($lsValue)."'"; 
       } 
       $lsQuery .= implode(" AND ", $paWhere); 
       //$lsQuery = substr($lsQuery,0,(strlen($lsQuery)-5)); 
     } 

     //echo $lsQuery; 
     //execute $lsQuery 
     $this->msLastQuery = $lsQuery; 
     if(!$this->execute()) 
     { 
      throw new DBException("Select failed, unable to execute query: ".$lsQuery); 
     } 
     else 
     { 
      $lbReturn = true; 
     } 
    } 
    catch(DBException $errorMsg) 
    { 
     ErrorHandler::handleException($errorMsg); 
    } 
    return $lbReturn; 
} 

génère cette instruction SQL:

SELECT * FROM `persons` WHERE [email protected] AND 2d1cf648ca2f0b2499e62ad7386eccc2 AND 1 AND per_email = '[email protected]' AND per_password = '2d1cf648ca2f0b2499e62ad7386eccc2' AND per_active = '1' 

Je ne sais pas pourquoi il montre d'abord que les valeurs après la clause where puis remonte et montre la clé => valeurs.

Une idée est?

Répondre

1

Vous réutilisez $paWhere dans votre boucle afin de l'ajouter aux valeurs actuelles. Vous devez utiliser un nouveau tableau:

$result = array(); 
foreach($paWhere as $lsKey => $lsValue) { 
    $result[] = $lsKey . " = '" . mysql_real_escape_string($lsValue) . "'"; 
} 
$lsQuery .= implode(" AND ", $result); 
Questions connexes