Php 根据表单字段动态选择查询
我有一个有两个字段的表单。用户可以填写其中一个,也可以同时填写两个,并相应地查询MySQL数据库 以下是我的php代码:Php 根据表单字段动态选择查询,php,mysql,forms,Php,Mysql,Forms,我有一个有两个字段的表单。用户可以填写其中一个,也可以同时填写两个,并相应地查询MySQL数据库 以下是我的php代码: $number1 = $_POST['number1']; $number2= $_POST['number2']; $set = FALSE; $query = "SELECT * FROM table"; if (!empty($number1 )) { $query .= " WHERE number1 = ".$number1."";
$number1 = $_POST['number1'];
$number2= $_POST['number2'];
$set = FALSE;
$query = "SELECT * FROM table";
if (!empty($number1 ))
{
$query .= " WHERE number1 = ".$number1."";
$set = TRUE;
}
if (!empty($number2))
{
$query .= ($set===TRUE ? " AND" : " WHERE") . " number2 = ".$number2."";
}
$data = mysql_query($query) or die("Couldn't execute query. ". mysql_error());
如果填写了number1或两个字段中的任何一个,代码工作正常。但是,当仅填写第二个字段时,我得到错误:
无法执行查询。您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第1行“”附近要使用的正确语法
如果我回显查询,它将正确显示:
从number2=输入值的表格中选择*
非常感谢您的帮助!谢谢 您是否忘记了转义值?你可以用这样的东西
$fields = array();
if(!empty($_POST['number1'])) {
$fields[] = 'number1='.mysqli_real_escape_string($_POST['number1']);
}
if(!empty($_POST['number2'])) {
$fields[] = 'number2='.mysqli_real_escape_string($_POST['number2']);
}
$sql = "SELECT * FROM table WHERE ".implide(" AND ", $fields);
$data = mysqli_query($query) or die("Couldn't execute query. ". mysql_error());
mysql扩展已被弃用,请改用mysqli
$number1 = $_POST['number1'];
$number2= $_POST['number2'];
$set = FALSE;
$query = "SELECT * FROM table";
if (!empty($number1 ))
{
$query .= " WHERE number1 = ".$number1."";
$set = TRUE;
}
if (!empty($number2))
{
if($set==FALSE)
$query .= " WHERE number2 = ".$number2;
else
$query .= " AND number2 = ".$number2;
}
我想你会因为作业而出错。您编写了$set==TRUE,其==not=== 错误在这里:
if (!empty($number2))
{
$query .= ($set===TRUE ? " AND" : " WHERE") . " number2 = ".$number2."";
}
您应该清理您的输入,请不要使用mysql\u查询,因为它已被弃用。您的代码使整个站点对注入开放。可以将php.net/pdo和php.net/mysqli作为备选方案。除了@DavidHoude comment,这是使用pdo方法的很酷的学习工具,我的工作从中受益匪浅。谢谢你的回复。我在表单上使用验证,因此用户只能输入数字。你对mysqli的看法绝对正确。我现在正在使用它,但问题仍然存在。我已经测试了你的代码。这没什么区别。无论如何谢谢你!谢谢你的建议和转义字符串。但这并没有解决问题。