您好我正在尝试将2个数组的值与此查询进行比较,这是我所知道的唯一方法:
$session = "1,2,3,"
$table_name = "table1";
$column_name = "data1"; // value for test is 1,4,5,
$sql = "";
$sql .= "SELECT * FROM $table_name WHERE ";
$franquia = array();
$franquia = explode(",", $session);
if (!empty($franquia)) {
$final_id = array();
foreach ($franquia as $val) {
if (trim($val) != '') {
$final_id[] = $val;
}
}
$count_data = count($final_id);
foreach ($final_id as $key => $id) {
if ($id > 0) {
$sql .= " $id IN ($column_name) ";
if ($key < $count_data - 1) {
$sql .= "OR ";
}
}
}
}
echo $sql;
我1,2,3
上的$session
和1,4,5
$data1
上的值$session
,因此$data1
和$session = 1,2,3
之间的比较可以归结为真实到期他们俩都有价值1,但我没有得到任何结果。
实际上只有两个数组都相同才有效,例如$data1 = 1,2,3
和{{1}}
我做错了什么?
答案 0 :(得分:0)
您正在使用IN子句错误;简而言之,而不是
WHERE value IN (column)
正确用法是:
WHERE column IN (value, value, value)
这反过来对你要做的事情没有帮助(more about the IN clause)。相反,请尝试以下方法:
foreach ($final_id as $key => $id) {
if ($id > 0) {
$sql .= "$column_name LIKE %$id,%";
if ($key < $count_data - 1) {
$sql .= "OR ";
}
}
}
}
这应该可行,但有几点你应该注意。首先你可能是vulnerable to SQL Injections,其次你应该考虑在你的数据库中使用不同的方案和数据,因为使用LIKE %%搜索数值是一种浪费,或提前从数据库获取条目并在结果字符串中搜索。考虑上面的代码,除了你应该避免的快速和肮脏的黑客:)