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が失敗していて、 $getfalseであるためです。これを試して:

$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それがブール値であり、falseであると仮定すると、falsemysql_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 に答える