0

您好我正在尝试将 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,3on$session1,4,5on的值,因此和$data1之间的比较应该返回 true,因为它们的值都为 1,但我没有得到任何结果。$session$data1

实际上它只有在两个数组相同的情况下才有效,比如$session = 1,2,3$data1 = 1,2,3

我究竟做错了什么?

4

1 回答 1

0

您使用错误的 IN 子句;简而言之,而不是

WHERE value IN (column)

正确的用法是:

WHERE column IN (value, value, value)

反过来,这对您尝试做的事情没有帮助(更多关于 IN 子句)。相反,请尝试以下操作:

foreach ($final_id as $key => $id) {
    if ($id > 0) {
        $sql .= "$column_name LIKE %$id,%";
        if ($key < $count_data - 1) {
            $sql .= "OR ";
        }
    }
}
}

这应该有效,但是您应该注意几件事。首先,您可能容易受到 SQL Injections的攻击,其次您应该考虑对数据库中的数据使用不同的方案,因为使用 LIKE %% 搜索数值是一种浪费,或者提前从数据库中获取条目并在结果字符串中搜索。只考虑上面的代码,只是你应该避免的快速而肮脏的 hack :)

于 2012-07-02T20:20:06.707 回答