2010-02-02 8 views
1

j'ai un tableau d'ID: s, et l'ID: s sont dans ce format:Petit problème et MySql Php

Bmw_330ci_89492822 

Il est donc une chaîne!

Maintenant, j'ai ce code pour trouver ce qui est dans ce tableau, dans MySQL: ($solr_id_arr est le tableau je l'ai mentionné ci-dessus, il contient la chaîne ID: s) ex: $solr_id_arr[0] sorties Bmw_330ci_89492822

$solr_id_arr_imploded = implode(", ", $solr_id_arr); 
$query = "SELECT * FROM my_table WHERE ad_id IN ('$solr_id_arr_imploded')"; 
$qry_result = mysql_query($query) or die(mysql_error()); 

Le problème est que cela ne fonctionnera pas car (je pense) qu'il devrait y avoir des guillemets autour de chaque élément implosé pour que MySQL trouve la correspondance. Le champ dans MySQL que je suis correspondant est de type Varchar.

Voici le $query fait écho:

SELECT * FROM my_table WHERE ad_id IN ('Bmw_m3_cool_565440282, Bmw_m5_839493889') 

Avez-vous d'autres solutions pour cela, tout ce que je besoin est de trouver des correspondances dans MySQL qui sont dans ce tableau!

Merci

Répondre

1

N'entourent la chose entière entre guillemets. Il est à la recherche d'où ad_id est 'Bmw_m3_cool_565440282, test'

Utilisez

SELECT * FROM my_table WHERE ad_id IN ('Bmw_m3_cool_565440282', 'test') 

Une solution rapide serait de changer:

//this 
$solr_id_arr_imploded = implode(", ", $solr_id_arr); 

//to this 
$solr_id_arr_imploded = implode("', '", $solr_id_arr); 
0

simple interrupteur à ', ' dans implode():

implode("', '", $solr_id_arr); 

Cette , avec les citations codées en dur dans le strin SQL g les formateront en tant qu'éléments distincts.

0

Les réponses précédentes fonctionneront correctement.

Assurez-vous simplement que les chaînes elles-mêmes ne contiennent pas de guillemets. Si c'est le cas, échapper chaque chaîne avant de faire l'implode().

0

Si c'était mon code je l'écrire comme ceci:

$solr_id_arr_imploded = "'" . implode("', '", $solr_id_arr) . "'"; 
$query = "SELECT * FROM my_table WHERE ad_id IN ($solr_id_arr_imploded)"; 
$qry_result = mysql_query($query) or die(mysql_error()); 

... juste parce qu'il garde tout le travail cité en un seul endroit. Vous pouvez également vous assurer que le tableau n'est pas vide avant d'entrer dans ce bloc de code. Sinon, SELECT sélectionnera tous les id_id vides, ce qui n'est probablement pas ce que vous vouliez. Nous supposons également que les éléments du tableau n'incluent pas de guillemets (ou de chaînes fournies par l'utilisateur qui n'ont pas été vérifiées).

1

Celui-ci semble compliqué, mais il est plus sûr et le plus rapide d'un

function escaped($str) 
{ 
    return mysql_escape_string($str); 
} 
$arrayOfIds = array_map("escaped", $solr_id_arr); 

$solr_id_arr_imploded = implode(", ", $arrayOfIds); 

$query = "SELECT * FROM my_table WHERE ad_id IN ('$solr_id_arr_imploded')"; 
$qry_result = mysql_query($query) or die(mysql_error());