【问题标题】:Search through database doesn't work通过数据库搜索不起作用
【发布时间】:2013-05-25 19:42:13
【问题描述】:

任何人都可以帮助我...我想按名称或协议编号搜索,但它不起作用,它只能按名称搜索,

我是计算机编程的绝对初学者,当我想按协议编号搜索时,它只显示我数据库的第一条记录,并且只按名称搜索效果很好,

'

     mysql_select_db("aruba", $con);

        $a1=$_POST['u_Name'];
         $a2=$_POST['u_Agreement'];


         $sql=" SELECT * FROM customer
            WHERE Name like ('%$a1%') 
            OR AgreementNum ='$a2'


                 ";


         $q=mysql_query($sql);
           $x=mysql_fetch_array($q);

          ?>
        $q=mysql_query($sql);
           $x=mysql_fetch_array($q);

        ?><table>
        <tr><td><b>Customer Name:</b></td><td><?php echo" " ,$x['Name'];
         ?></td><?php
          ?><tr><td><b>Address:</b></td><td><?php echo"", $x['Address'];
          ?></td><?php
            ?><tr><td><b>Contact Person:</b></td><td><?php echo"             " ,$x['Sales'];
           ?></td><?php
           ?><tr><td><b>Phone Number: </b></td><td><?php echo"           ", $x['PhoneNum'];
         ?></td><?php
            ?><tr><td><b>Maintenance Agreement No:</b></td><td><?php echo"             "                 ,$x['AgreementNum'];
       ?></td><?php   
        ?><tr><td><b>Start Date:</b></td><td><?php echo"          " ,$x['StartDate'];
         ?></td><?php 
        ?><tr><td><b>End Date: :</b></td><td><?php echo"      " ,$x['EndDate'];
      ?></td><?php 
          ?><tr><td><b>Reseller Name:</b></td><td><?php echo" " ,$x['Reseller'];
         ?></td><?php 
          ?><tr><td><b>Product Model:</b></td><td><?php echo"      " ,$x['ModelNum'];
        ?></td><?php 
         ?><tr><td><b>Remarks:</b></td><td><?php echo" " ,$x['Quantity'];
        ?></td><?php 
        mysql_close($con)
         ?>
       '

【问题讨论】:

  • 兄弟,你甚至 mysqli 吗? mysql_* 方法自 PHP v5.5.0 起已弃用,将来将被删除。 php.net/manual/en/changelog.mysql.php请切换到更安全的mysqli_*或PDO连接。
  • 容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。
  • 请不要在sql查询中直接使用用户输入。确保首先使用适当的函数对它们进行转义,例如mysql_real_escape_string,但实际上你应该使用 PDO 或 mysqli 函数,因为现在不推荐使用 mysql 函数
  • 您的示例缺少实际的数据库调用。此外,对于 db 问题,它有助于显示表中的 3 或 4 行内容、您期望获得的输出以及实际获得的输出。

标签: php mysql sql database


【解决方案1】:

尝试将您的陈述用括号括起来。我不确定 LIKE 是否接受和 OR 参数,但我认为这是您问题的根源。试试:

$sql=" SELECT * FROM customer
            WHERE (Name like ('%$a1%') )
            OR ( AgreementNum ='$a2' ) 
";

另外,还有几点注意事项:

  • 不要使用 mysql_,它已被弃用。切换到 PDO 或 mysqli。
  • 过滤用户输入。如果您将用户输入直接粘贴到您的查询中,则您要求进行 mysql 注入。

想知道如果突然发生这种情况会发生什么? (不要在你的数据库上测试这个!!)

$a2 = "'); DELETE FROM customer;--";

答案:

SELECT * FROM customer
     WHERE (Name like ('%$a1%') )
     OR ( AgreementNum =''); DELETE FROM customer;--' ) 

【讨论】:

    【解决方案2】:
    select * from table where field in ('1','2','3')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-25
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      相关资源
      最近更新 更多