警告:在&中划分为零mysqli_query():空查询

时间:2013-11-21 19:35:19

标签: php mysql search html-table

我的网站上有关于事件管理的数据表,我想根据事件的“名称”和“类型”向表中添加搜索功能。

这是我的代码,我得到错误,当用户提交搜索时,我需要刷新页面并过滤表格中的结果,但是这段代码打开了一个完全干净的样式表的新页面:

我需要根据用户在搜索文本框中输入的内容来过滤我的表格 你可以在我问过的上一个问题中看到我的表格 请提供简单的答案,我是php的新手。

            <form action="search.php" id="searchform" method="POST" class="searchbox-container">
                <input type="text" id="searchbox" placeholder="Search" name="searchbox" class="searchbox" />
                <select name="select" id="select">
                <option value="type">Type</option>
                <option value="name">Name</option>
            </select>
                <input type="submit" name="search" class="searchbox-btn" value="Go" />
             <?php

                if(isset($_POST['searchbox']) && $_POST['searchbox'] !=""){
                    $search=preg_replace('#[^a-z 0-9?!]#i','',$_POST['searchbox']);


                  $user="admin";
                  $pass="neehahs";
                  $host="localhost";
                  $db_name="eventregisteration";

                  $con=mysqli_connect($host, $user, $pass, $db_name);
                      if(mysqli_connect_errno($con)){
                       echo "Failed to connect to MySQL: " . mysqli_connect_error();
                      }
                      if($_POST['select']=="type"){
                    $sqlcommand="SELECT * FROM eventform WHERE event_type LIKE "%$search%"";    


                    }
                    elseif($_POST['select']=="name"){
                    $sqlcommand="SELECT * FROM eventform WHERE event_name LIKE "%$search%"";    ===>> this line give Division by zero error 


                    }
                      $sqldata=mysqli_query($con,$sqlcommand) ==>> this line give  mysqli_query(): Empty query error
                      or die("Error Getting Data");
                      $count=mysqli_num_rows($sqldata);
                      if($count>1){
                          while($row=mysqli_fetch_array($sqldata)){
        echo "<table>";
                        echo "<tr align=center><td>";
                          echo $row['event_code'];

                          echo "</td><td>";
                          echo $row['event_name'];
                          echo "</td><td>";

                          echo $row['event_type'];
                          echo "</td><td>";

                          echo $row['event_level'];
                          echo "</td><td>";

                          echo $row['start_date'];
                          echo "</td><td>";

                          echo $row['end_date'];
                          echo "</td><td>";

                          echo $row['points'];
                          echo "</td><td>";

                          echo $row['pic'];
                          echo "</td><td>";

                          echo $row['video'];
                          echo "</td><td>";

                          echo $row['description'];
                          echo "</td></tr>";

                          }
              echo "</table>";


                      }else{
                          $search_output="<hr/>0 Results for<strong>$sqldata</strong><hr/>$sqlcommand";

                }
                }

                ?>

2 个答案:

答案 0 :(得分:2)

您的SQL字符串在双引号内有双引号。这打破了字符串,然后百分号导致PHP认为你正在进行模数运算。

改变这个:

$sqlcommand="SELECT * FROM eventform WHERE event_type LIKE "%$search%"";

对此:

$sqlcommand="SELECT * FROM eventform WHERE event_type LIKE '%$search%'";

你需要为两个字符串都这样做。

答案 1 :(得分:2)

您错误地使用了引号,因此%子句中的LIKE通配符将被视为模数运算符。

$sqlcommand = "SELECT * FROM eventform WHERE event_name LIKE " % $search % "";
              ^----                                      ----^ ^ ^-- --^ ^ ^^

该陈述看起来像这样:

$sqlcommand = 'foo' % 'bar' % 'baz';

在上面的语句中,字符串将首先按类型转换为整数。这将使所有字符串等于零 - 这可以解释为什么你会收到Division by zero错误。

将此(以及所有其他类似变量)更改为:

$sqlcommand = "SELECT * FROM eventform WHERE event_name LIKE  '%$search%'";

如果$search来自用户输入,那么您有一个SQL注入漏洞。我建议使用参数化查询来防止这种情况。有关详细信息,请参阅this question