10
votes

Tableau dans la requête SQL?

J'ai un problème à faire une requête SQL avec un tableau dans ma clause où.

Par exemple: p>

Mon tableau: P>

for(...) {
$where = $where." title='".$myarray[$count]."' OR ";
}
$where = substr($where , 0, -3);
.....
SELECT * FROM myTable WHERE ".$where."


2 commentaires

'Ou' est l'équivalent SQL du diable et ralentira même une petite demande.


N'oubliez pas de foreach ($ myarray comme $ clé => $ VAL) $ myarray [$ clé] = mysql_real_escape_string ($ val);


4 Réponses :


15
votes

Vous pouvez utiliser MySQL's en fonction

éditer : Comme l'a dit Amosrevira, vous devez vous échapper des chaînes dans le tableau. P>

$myarray[1] = "'hi'";
$myarray[2] = "'there'";
$myarray[3] = "'everybody'";

$newarray = implode(", ", $myarray); //makes format 'hi', 'there', 'everybody' 

SELECT * FROM myTable WHERE title IN ($newarray);


2 commentaires

Je pense qu'il a besoin d'ajouter des citations aux cordes sur le tableau ..


@njaknjak c'est évidemment une mauvaise réponse. Vous n'avez pas besoin d'ajouter des citations manuellement - c'est un travail pour PHP. et vous devez échapper aux cordes



2
votes

Vous pouvez nous utiliser l'opérateur dans code>. Vous voulez que cela ressemble à:

$sql = "SELECT * FROM myTable WHERE title IN '" . implode("','", $myarray) . "';"


0 commentaires

3
votes

Vous pouvez essayer d'utiliser dans dans votre clause, xxx

ou xxx


0 commentaires

9
votes
$myarray[1] = "hi";
$myarray[2] = "there";
$myarray[3] = "everybody";

//every quoted string should be escaped according to SQL rules
foreach($myarray as $key => $val) {
  $myarray[$key] = mysql_real_escape_string($val);
}

$in_str = "'".implode("', '", $myarray)."'"; //makes format 'hi', 'there', 'everybody' 

SELECT * FROM myTable WHERE title IN ($in_str);

0 commentaires