我得到了这篇文章的帮助,但需要一件事的帮助:)我有十二个下拉菜,可以选择多个值。在提交时,这些值将发布到另一个页面,在该页面上我对数据库进行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:我想用"下拉帖子"的帖子中的"或"我可以在数据库中查询"。
谢谢!:(
在这里已经说过的SQL和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>';
尝试一下。它采用每个字段,并将选项拆分,每个选项值创建一个条件。然后将它们与ORS一起放回。
$where_a = array();
foreach($_POST as $key => $option) {
$val_a = explode(',',$option);
foreach($val_a as $k => $optval) {
$where_a[] = "`".$key."` = '".$optval."'";
}
}
$where = implode(' OR ',$where_a);
$query_string = "SELECT * FROM dummy_table WHERE ".$where;