1

これは私が使用しているコードです

<?php
$link = mysql_connect('localhost', 'root', '')
    OR die(mysql_error());

          $user =  $_POST['username'];
      $password = $_POST['password'];

$login = sprintf("SELECT * FROM imagehosting WHERE username='%s' AND password='%s'  ",
            mysql_real_escape_string($user, $link),
            mysql_real_escape_string($password, $link));

            $rowcount = mysql_num_rows($login);
            echo "<br /><br />" . $rowcount; 
?>

これは私が得ているエラーです

警告:mysql_num_rows()は、パラメーター1がリソースであることを期待しています

mysqliを使用する必要があることは理解していますが、php.netページでmysqlを使用しているため、$printfと$mysql_num_rowの使用方法を学習しようとしています。

この$sprintfで何をしているのか、100%確信が持てないので、質問が基本的すぎる場合は申し訳ありません。

4

4 に答える 4

6

mysql_num_rows()パラメータ1がリソースであると想定していますが、文字列を指定しました。クエリを実行して、によって返されるリソースを取得する必要がありますmysql_query()

例えば:

$resource = mysql_query($login);
$rows = mysql_num_rows($resource);

関数を使用するには、次のmysql_*ようにします。

mysql_connect('host', 'user', 'password'); // connect to server
mysql_select_db('database name'); // select the database you'll be working with

$result = mysql_query('SELECT test FROM test_table'); // make a query
while ($row = mysql_fetch_assoc($result)) { // go through the obtained results
    echo $row['test']; // use the obtained results
}

mysql_close(); // close the database connection

クエリの作成に使用sprintf()する場合は、文字列を作成して適切な名前の変数に格納し、わかりやすくすることをお勧めします。

$query = sprintf("SELECT test FROM test_table WHERE a = '%s' AND b = '%s'",
    mysql_real_escape_string($a),
    mysql_real_escape_string($b));

次に、クエリをに送信しmysql_query()て実行します。

$result = mysql_query($query);

$linkまた、パラメータはオプションであることに注意してください。そのスクリプトで行うのが単一のデータベース接続での作業だけである場合は、コードを明確にするためにそれを省略できます。


mysql_num_rows()ちなみに、データも必要ない場合は、クエリによって返される行数を取得することはお勧めできません。行数だけを調べる必要がある場合は、SELECT COUNT(*) AS total ...代わりに使用することを検討してから、 totalwithの値を取得してmysql_fetch_assoc()ください。


最後になりましたが、長期的には役立つ可能性が高いため、関数の代わりにPDOを使用することを検討してください。このチュートリアルmysql_*をチェックして、使用方法を確認してください。

于 2011-05-31T23:26:43.990 に答える
2

文字列だけからレコードセットの行数を取得することはできません。データベースを選択して、実際にクエリを実行する必要があります。

のマニュアルページmysql_num_rows(もちろん、関数を使用する前に読んでください!)には、実行する必要があることの正確な例があります。

これが彼らの例です:

<?php

$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);

$result = mysql_query("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows($result);

echo "$num_rows Rows\n";

?>

これは、特定のパラメーター値を変更して、このDBインターフェースを機能させるために最低限必要なものです。

于 2011-05-31T23:31:05.067 に答える
1

どのデータベースで作業するかをサーバーに指示するのを忘れたと思います。これを試してみてください:

<?php
$link = mysql_connect('localhost', 'root', '') 
    OR die(mysql_error());

$db = mysql_select_db('mydb', $link)

$user =  $_POST['username'];
$password = $_POST['password'];

// ...and so on, and so forth
?>
于 2011-05-31T23:30:00.210 に答える
-1

これを試して...

DBを選択し、クエリを実行して、num_rowsを修正します。

<?php
$link = mysql_connect('localhost', 'root', '') OR die(mysql_error());
mysql_select_db('your_db',$link);

$user =  $_POST['username'];
$password = $_POST['password'];

$login = sprintf("SELECT * FROM imagehosting WHERE username='%s' AND password='%s'  ",
            mysql_real_escape_string($user, $link),
            mysql_real_escape_string($password, $link));
$query=mysql_query($login) OR die(mysql_error());

            $rowcount = mysql_num_rows($query);
            echo "<br /><br />" . $rowcount; 
?>
于 2011-05-31T23:34:21.337 に答える