Php数组转MySQL查询条件结构

xzv2uavs  于 12个月前  发布在  Mysql
关注(0)|答案(2)|浏览(108)

下面是PHP中的数组:

$arr = [1, 3, '4A', '5A', '5C', '2B', '2C', '2E'];

字符串
我需要把这个数组转换成一个字符串,看起来像这样:

$filter =     "(id like '1%') OR 
                (id like '3%') OR 
                (id like '4A%') OR 
                (id like '5A%' OR id like '5C%') OR 
                (id like '2B%' OR id like '2C%' OR id like '2E%')";


数组值的第一个字符表示一个唯一的类别,并用括号括起来,最后我将用它来查询数据库;

$sql = "SELECT * FROM list WHERE {$filter}";

谁能帮我把这个数组转换成正确的字符串?最好的方法是什么?

为了让你给予一个概念,我正在尝试:我的数据库行中的“id”列看起来像; 1B 2875。其中第一个字符(1)表示类别,第二个字符(B)表示子类别。给定的数组是客户端过滤器请求的结果。

eagi6jfj

eagi6jfj1#

可以在SQL中使用正则表达式:
第一个月
括号内的值可以用PHP函数implode('|', $filter_strings)生成
请注意,您应该首先验证并转义筛选器字符串,以防止用户输入操作查询。函数preg_quote在这里很有用。

nlejzf6q

nlejzf6q2#

填充一个条件段数组和一个% Package 值数组,然后使用准备好的语句(如果查询中有任何占位符)或标准查询(如果没有占位符)执行查询。
产品编号:(PHPize Demo

$array = [1, 3, '4A', '5A', '5C', '2B', '2C', '2E'];

$conditions = [];
$params = [];
foreach ($array as $v) {
    $conditions[] = 'id LIKE ?';
    $params[] = "%$v%";
}

$sql = 'SELECT * FROM list';
if ($conditions) {
    $sql .= ' WHERE ' . implode(' OR ', $conditions);
    $result = $mysqli->execute_query($sql, $params);
} else {
    $result = $mysqli->query($sql);
}

foreach ($result as $row) {
    echo "<div>{$row['id']}</div>\n";
}

字符串
当行人时,生成的SQL将是:

SELECT * FROM list WHERE id LIKE ? OR id LIKE ? OR id LIKE ? OR id LIKE ? OR id LIKE ? OR id LIKE ? OR id LIKE ? OR id LIKE ?


如果你还不喜欢PHP8.2,there are other ways to bind the parameters/values and execute the query

相关问题