2009-10-22 14 views
0

J'ai un formulaire de recherche très simple, qui prend un terme de GET_, puis l'incorpore dans une requête SQL. Je suis en train d'utiliser cette chaîne de GET dans une requête paramterized, comme ceci:Problème avec des guillemets et une requête SQL paramétrée

$searchString = '%' . $searchString . '%'; 
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = $searchString" . $max; 

    if ($getRecords = $con->prepare($recordsQuery)) { 
     $getRecords->bind_param("s", $searchString); 
     $getRecords->execute(); 
     $getRecords->bind_result($username, $firstname, $lastname); 
     $rows = array(); 

     while ($getRecords->fetch()) { 
      $row = array(
       'username' => $username, 
       'firstname' => $firstname, 
       'lastname' => $lastname, 
      ); 
      $rows[] = $row; 
     } 
     return $rows; 
    } 

Cependant, cela se traduit par l'erreur

colonne Unkown « terme » dans « where ».

Je suppose que c'est parce que mon terme n'est pas cité, mais l'ajout de guillemets échappés à la variable n'a rien fait.

Les erreurs de syntaxe ou autres sont un produit de modification pour poser cette question, et n'existent pas dans mon code actaul.


OK, je fixe en changeant les lignes suivantes:

$searchstring = "'" . $searchstring . "'"; 
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = $searchString" . $max; 

Je suis sûr que cette approche est probablement mauvaise parce qu'elle ne paramterized ..., mais je ne pouvais pas le faire fonctionner de toute autre manière.

Répondre

1

Vous avez oublié quelques citations: $searchString = '"%' . $searchString . '%"';

Mais pourquoi voulez-vous construire la demande comme ça quand vous pouvez utiliser des paramètres liés: http://www.php.net/manual/fr/pdostatement.bindparam.php

 

$searchString = '%' . $searchString . '%'; 
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = :lastname" . $max; 
if ($getRecords = $con->prepare($recordsQuery)) { 
     $getRecords->bind_param(":lastname", "%".$searchString."%"); 
     $getRecords->execute(); 
     $getRecords->bind_result($username, $firstname, $lastname); 
     $rows = array(); 
     while ($getRecords->fetch()) { 
      $row = array(
       'username' => $username, 
       'firstname' => $firstname, 
       'lastname' => $lastname, 
      ); 
      $rows[] = $row; 
     } 
     return $rows; 
    } 
 
+0

Ajout des citations n'a rien changé. –

+0

Qu'est-ce qui est exactement dans la variable $ max var? – Arkh

+0

Juste un int, une évaluation faite pour voir combien d'enregistrements afficher. –

Questions connexes