mysql_num_rows抛出警告但不继续

时间:2013-03-12 21:14:39

标签: php mysql warnings

我的代码会抛出搜索代码的警告。 警告是 SCREAM:忽略错误抑制 (!)警告:mysql_num_rows()期望参数1为资源,第15行的C:\ wamp \ www \ test \ search.php中给出布尔值

代码是

<html>
    <head>
    </head>
<body>  
<?php
    mysql_connect("localhost","root","") or die (mysql_error());
    mysql_select_db("list") or die (mysql_error());

    if(empty($_POST) === false)
    {
        $data=$_POST['criteria'];


        $get=mysql_query('SELECT SRNO, fname, lname, phone, email, address, comments from names where fname='.$data);
        if (mysql_num_rows($get)==0) 
            {
                echo 'There are no search results!!';
            }
                else
            {
                echo '<table border=0 cellspacing=25 cellpadding=1>';
                echo'<tr><th>Sr. No</th><th>First Name</th><th>Last Name</th><th>Phone No</th><th>E-mail</th><th>Address</th><th>Comments!!</th><th>Modify</th><th>Delete!</th></tr>';      
                while($get_row=mysql_fetch_assoc($get))
                    {
                        echo '<tr><td>'.$get_row['SRNO'].'</td><td>'.$get_row['fname'].'</td><td>'.$get_row['lname'].'</td><td>'.$get_row['phone'].'</td><td>'.$get_row['email'].'</td><td>'.$get_row['address'].'</td><td>'.$get_row['comments'].'</td><td><a href="index.php?edit='.$get_row['SRNO'].'">Edit</a></td><td><a href="index.php?delete='.$get_row['SRNO'].'">Delete</a></td></tr>';

                    }
                echo '</table>';
            }
        /*
        if(mysql_num_rows($getf) == 0)
        {
            $getel=mysql_query('SELECT SRNO, fname, lname, phone, email, address, comments from names where lname='.$_GET['$data']));

        }*/
    }
        echo '<form action="" method="post">';  
        echo '<input type="text" name=criteria>';
        echo '<input type="submit" value="search" name="submit">';
        echo '</form>';


?>
</body>
</html>

4 个答案:

答案 0 :(得分:1)

您的查询有问题。尝试:

$get = mysql_query("SELECT SRNO, fname, lname, phone, email, address, comments from names where fname = '" . mysql_real_escape_string($data) . "'");

需要在引号中包围fname,因为它是一个字符串。

另外,你的脚本打开sql注入。您应该考虑使用PDO

答案 1 :(得分:1)

那是因为你的sql失败而且$get是假的。试试这个:

$get=mysql_query("SELECT SRNO, fname, lname, phone, email, address, comments from names where fname='" . mysql_real_escape_string($data) . "'");

请注意我还添加了mysql_real_escape_string,当有人决定使用sql注入来攻击您的网站时,这会让您免于哭泣。此外,您应该考虑不使用mysql_ *函数并切换到预准备语句,因为这些函数已被弃用。

答案 2 :(得分:0)

函数mysql_query在错误尝试时返回FALSE

 if ($get) {
    if (mysql_num_rows($get)==0) {
       ...
 } else {
    echo mysql_error();
 }

答案 3 :(得分:0)

假设$get是一个布尔值而且它是假的,那么mysql_query()可能会返回false。

来自手册:http://php.net/manual/en/function.mysql-query.php

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回   resultset,mysql_query()在成功时返回资源,或者返回FALSE   错误。

     

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,   mysql_query()成功时返回TRUE,错误时返回FALSE。

     

返回的结果资源应该传递给mysql_fetch_array(),   以及用于处理结果表的其他函数,以访问   返回数据。

     

使用mysql_num_rows()来查找为a返回的行数   SELECT语句或mysql_affected_rows()来查找多少行   受到DELETE,INSERT,REPLACE或UPDATE语句的影响。

     

mysql_query()也会失败,如果用户没有,则返回FALSE   有权访问查询引用的表。