1

ユーザーがアップロードしたファイルの数を確認するための簡単なスクリプトがあります。

$sql = "SELECT * from $username where file IS NOT NULL";
$result = mysql_query($sql);
$count=mysql_num_rows($result);

テーブル$usernameに、ファイルがnullでない行がない場合は、次のように吐き出されます。

「警告:mysql_num_rows():指定された引数は有効なMySQL結果リソースではありません...」

これを回避するにはどうすればよいですか?このエラーメッセージの表示を単純に抑制する簡単な方法はありますか?または、SQLクエリが最初に発生するのを防ぐことができる単純な「if」ステートメント?

4

7 に答える 7

6

あなたはこのようなことをすることができます:

<?php
 $sql = "SELECT * from $username where file IS NOT NULL";
 $result = mysql_query($sql);
 if($result) 
 {
     $count=mysql_num_rows($result);
 }
 else 
 {
     $count = 0;
  }

または、省略形を使用します。

<?php 
 $count = ($result) ? mysql_num_rows($result) : 0;

ノート:

他のコメントで見ることができるように、これはあなたの質問への単なる答えであり、一度に1つの問題に対処します。ここでの$usernameの使用は、特に動的コンテンツやユーザー生成コンテンツの場合は注意が必要です。データベースとのやり取りの方法に対する長期的な改善を検討するのが最善ですが、今のところ修正はここにあります;-)

PS。すべての新しいもの、おそらくフレームワークを学びたくない場合は、 Codeigniterのようなものが役に立ちます。アクティブレコードクラスの使用は簡単で、それ自体が多くのことを処理します。

于 2012-06-19T19:23:50.000 に答える
4

エラーを抑制することはあなたがしたい最後のことです。あなたはそれらを扱うべきです。

$sql = 'SELECT * FROM ' . mysql_real_escape_string($username) . ' WHERE `file` IS NOT NULL';
$result = mysql_query($sql);

if ($result !== false) {
    $count=mysql_num_rows($result);
} else {
    // An error occurred, handle it here.
}

また、動的なテーブル名を使用しているのは恐ろしいことです。これをしないでください!

さらに、SQLインジェクションに対して広くオープンである可能性があります。この問題を回避するために、PDOで準備されたクエリを使用する方法を学びます。

于 2012-06-19T19:24:38.050 に答える
3

mysql_query($sql) or die("invalid sql");最も簡単な方法では、try/catchを実行または配置できます。

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
if (!mysql_select_db('database_name')) {
    die('Could not select database: ' . mysql_error());
}
$result = mysql_query('SELECT name FROM work.employee');
if (!$result) {
    die('Could not query:' . mysql_error());
}
echo mysql_result($result, 2); // outputs third employee's name

mysql_close($link);
?>

上記のhttp://www.php.net/manual/en/function.mysql-result.phpのコードは、必要なものを示していると思います。

ここif (!$result) {...}が鍵です。

于 2012-06-19T19:25:28.067 に答える
2

このエラーを抑制する簡単な方法は、mysql_queryとmysql_num_rowsの前に@を付けることですが、お勧めしません。適切なエラー処理を行う必要があります。

于 2012-06-19T19:24:15.077 に答える
1

$resultクエリの実行中にエラーが発生した場合はfalseになるため、使用する前に確認してください。

if $result === false)
{
     // stuff went boom!
}
于 2012-06-19T19:24:05.323 に答える
1

@シンボルを試すことができます。したがって、mysql_queryの呼び出しは次のようになります$result = @mysql_query($sql);

アップデート

他の場所で(特にこの回答へのコメントとして)述べられているように、自分が何をしているのかを理解していない限り、エラーを抑制すべきではありません。

アップデート2

エラー制御演算子のドキュメントは次のとおりです

于 2012-06-19T19:24:06.593 に答える
0
if( !is_resource($result) )

のマニュアルをis_resource()参照してください。

于 2012-06-19T19:24:38.630 に答える