0

我的代码引发了搜索代码的警告。警告是 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

4 回答 4

1

您的查询有问题。尝试:

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

需要fname用引号括起来,因为它是一个字符串。

此外,您的脚本对 sql 注入开放。您应该考虑使用PDO

于 2013-03-12T21:17:24.260 回答
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_* 函数并切换到准备好的语句,因为这些函数已被弃用。

于 2013-03-12T21:17:24.083 回答
0

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

 if ($get) {
    if (mysql_num_rows($get)==0) {
       ...
 } else {
    echo mysql_error();
 }
于 2013-03-12T21:17:34.780 回答
0

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

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

对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。

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

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

使用 mysql_num_rows() 找出 SELECT 语句返回了多少行,或使用 mysql_affected_rows() 找出有多少行受到 DELETE、INSERT、REPLACE 或 UPDATE 语句的影响。

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

于 2013-03-12T21:18:11.777 回答