Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据表单字段动态选择查询_Php_Mysql_Forms - Fatal编程技术网

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."";

我有一个有两个字段的表单。用户可以填写其中一个,也可以同时填写两个,并相应地查询MySQL数据库

以下是我的php代码:

$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的看法绝对正确。我现在正在使用它,但问题仍然存在。我已经测试了你的代码。这没什么区别。无论如何谢谢你!谢谢你的建议和转义字符串。但这并没有解决问题。