gpt4 book ai didi

php - mysql 查询中的多个 PHP 值 - 如何分离多个选项来查询数据库

转载 作者:行者123 更新时间:2023-11-29 10:50:45 25 4
gpt4 key购买 nike

我从 this post 获得了帮助但还需要一件事的帮助:)我有十二个下拉菜单,可以选择多个值。提交后,这些值将发布到另一个页面,我在其中对数据库进行 mysql 查询。如果我从每个下拉列表中选择一个值,它就会起作用。但是,如果我选择多个,则只会查询一个。

如果我选择多个值,以下是查询输出:

SELECT * 
FROM dummy_table
WHERE Role = 'Student'
OR Name = '**George,Sheila**'
OR City = 'New York';

我希望它是Name='George OR Sheila',这样我就可以拉出具有这两个名字或其他值的人。

<?php 
foreach($_POST as $key=>$option){
$countValue = count($option);

for($i=0; $i<$countValue; $i++){
$queryString_start_with_comma .= ",$option[$i]";

if($i >1){
$queryString_start_with_comma .= ",$option[$i] OR";
}
}

$queryString_remove_extra_comma= preg_replace("/,/", "", $queryString_start_with_comma, 1);
$query_string_with_and .= " OR $key = '$queryString_remove_extra_comma'";

unset($queryString_start_with_comma);
}

if ($sql_post_parameters == "AND") {
$query_string_second_part_ready = preg_replace("/AND/", "", $query_string_with_and, 1);
}
else {
$query_string_second_part_ready = preg_replace("/OR/", "", $query_string_with_and, 1);
}


$query_string= "SELECT * FROM dummy_table WHERE $query_string_second_part_ready";
<小时/>

TL;DR:我想用“OR”分隔从下拉列表的 POST 中提取的值,以便我可以在数据库中查询这两个值。

谢谢! :)

最佳答案

正如这里已经说过的SQL and PHP filter sqli_* 函数在处理用户输入时并不是那么好(好吧,事实上它们真的很糟糕,你必须自己清理和构建查询,一点也不用户友好)

<小时/>

安全第一,这是一种在 PDO 中使用准备好的语句和可信参数白名单的方法:

        // DB connect
$db = new PDO('mysql:host=localhost;dbname=DB_name', 'user', 'pwd');

$where = array();
$param = array();

foreach($_POST as $key => $option) {
if (
!empty($option)
and in_array($key, array('Role','Name','City')))
{
if (is_array($option)) {
foreach($option as $k => $optval) {
$where[] = "`".$key."` = ?";
$param[] = $optval;
}
}
else {
$where[] = "`".$key."` = ?";
$param[] = $option;
}
}
}

$query_string = "SELECT * FROM dummy_table";

if(!empty($where))
$query_string .= " WHERE ".implode(' OR ',$where);

// we prepare our request
$stmt = $db->prepare($query_string);
// we execute with our parameters
$stmt->execute($param);
echo '<pre>';
print_r($stmt->fetchAll());
echo '</pre>';

关于php - mysql 查询中的多个 PHP 值 - 如何分离多个选项来查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com