繁体   English   中英

比较数组mysql php中的值

[英]Compare values from array mysql php

嗨,我正在尝试使用此查询比较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; 

我在$session上有值1,2,3 ,在$data1上有值1,4,5 ,因此$session$data1之间的比较应该返回true,因为它们都具有值1,但是我什么也没得到结果。

实际上,只有两个数组相同时,它才有效,例如$session = 1,2,3$data1 = 1,2,3

我究竟做错了什么?

您使用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注入的攻击 ,其次,您应该考虑对数据库中的数据使用不同的方案,因为使用LIKE %%搜索数值是浪费的,或者预先从数据库和数据库中获取条目。搜索结果字符串。 考虑一下上面的代码,但应该避免快速而肮脏的hack :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM