2011-06-13 10 views
1

私は、次のPHPスクリプトを持っている:空のテーブルのPHPのsql-queryは何を返しますか?

<?php 
     $all_threads=mysql_query("SELECT * FROM forum_threads WHERE category=$_GET[id]"); 

     if($all_threads){ ?> 
      //Do something. 
    <?php 
     } 
     else { ?> 
      //Do something else 
     <?php 
     } ?> 

テーブルforum_threadsは空なので、クエリが実行されるはずですhttp://php.net/manual/en/function.mysql-query.phpのドキュメントと「それ以外」のブロックに応じて「false」に戻す必要があります。しかし、不思議なことに、ifブロックが実行されています。どうして?

答えて

5

0行にFALSEではなく、MySQLリソースを返します。クエリエラーでFALSEを返します。

代わりにmysql_num_rows()を確認できます。返される行がない場合は0になります。

また、SQLインジェクションの脆弱性もあります。 mysql_real_escape_string()でGETパラメータをエスケープします。

可能であれば、mysql_*()を捨て、PDOを使用してください。

+0

ありがとうございます!素晴らしい返信です! – aakashbhowmick

+0

'mysqli_'は' mysql_'からアップグレードする別のオプションです –

2

SQL文にエラーがないため、一致するレコードがないため空の結果セットが返されるため、falseは返されません。