小Php和MySql问题

时间:2010-02-02 13:12:59

标签: php sql mysql html database

我有一个ID:s数组,ID:s采用以下格式:

  Bmw_330ci_89492822

所以这是一个字符串!

现在,我有这个代码在MySQL中查找该数组中的任何内容: ($solr_id_arr是我上面提到的数组,它包含字符串ID:s) 例如:$solr_id_arr[0]输出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());

问题是这不会起作用,因为(我认为)应该在每个内爆元素周围引用,以便MySQL找到匹配。我匹配的MySQL中的字段是Varchar类型。

以下是$query回复:

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

你有没有其他解决方案,我需要的是在MySQL中找到这个数组内的匹配!

由于

5 个答案:

答案 0 :(得分:1)

不要用引号括起整个东西。它正在寻找ad_id为'Bmw_m3_cool_565440282, test'

的位置

使用

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

快速解决方法是改变:

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

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

答案 1 :(得分:1)

这个似乎很复杂,但它更安全,更快

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

答案 2 :(得分:0)

', '中简单切换到implode()

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

这与SQL字符串中的硬编码引号一起将它们格式化为单独的项目。

答案 3 :(得分:0)

以前的答案可以正常使用。

确保字符串本身不包含引号。如果是这样,请在执行implode()之前转义每个字符串。

答案 4 :(得分:0)

如果是我的代码,我会这样写:

$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());

...只是因为它将所有引用工作保存在一个地方。在输入此代码块之前,您可能还需要确保该数组不为空。否则,SELECT将匹配所有空的ad_id,这可能不是您想要的。我们还假设数组的元素不包含任何引号字符(或用户提供的字符串,这些字符串未经过完整性检查)。