2010-11-30 19 views
0

こんにちは、私は以下のエラーを受け取りました、私はすべてをダブルチェックし、その理由を知らない。 警告:はmysql_num_rows():指定された引数は、ライン上の/home/namebob/public_html/site_reg/statlookup.phpに有効なMySQLの結果リソースではありません6警告:mysql_num_rows():指定された引数が有効ではありません

<?php 
    include_once('common.php'); 
    $cid  = $_REQUEST['cid']; 
    $_elmID  = $_REQUEST['elmID']; 
    $scan = mysql_query("SELECT `id`, `state` FROM `mast_state` WHERE `countryid` = $cid"); 
    if(mysql_num_rows($scan)>0) 
    { 
... 
+1

'$ CID = $ _REQUEST [ 'CID'];'べきである '$のCID =(int型)$ _REQUEST [ 'CID'];' SQLインジェクション攻撃を避けるためです。 – tamasd

+0

@Yorirou、それはcidが数字の場合のみです。彼はそれを引用するか、またはPDOの自動引用機能を使用する必要があります。 – Rahly

+0

実際には、何もエラーを処理しないため、何も「ダブルチェック」しませんでした。エラー処理(およびデバッグ)はプログラミングの最も重要な部分ですが、これまで聞いたことのない初心者はいません。実際には何も確認する必要はありません。プログラムが間違っていることを教えてください。 mysqlクエリを正しく実行する方法については、私の他の回答を参照してください:http://stackoverflow.com/questions/2666104/how-to-reslove-mysql-fetch-assoc-problems/2666119#2666119 –

答えて

1
$scan = mysql_query("SELECT `id`, `state` FROM `mast_state` WHERE `countryid` = $cid"); 
    $stock_num = ''; 
    if($scan) 
    { 
     while($row=mysql_fetch_object($scan)) 
     { 
      if($row->state) 
      $state = $row->state; 
     } 
    }  
1

あなたがnullのようなものを取得する場合は、var_dump($scan)を試みる価値があります/ falseは、クエリが失敗することを意味します。その場合は、echo mysql_error()を試して、SQLエラー(テーブルの欠落など)を確認してください。

+0

私はダンプのために、そして最後のeエラーが発生しました:致命的なエラー:未定義の関数mysql_last_error()を呼び出す – acctman

+0

aw、私の悪い、mysql_error()の代わりに –

+0

私の答えを編集する必要があります。 –

1

おそらくクエリが失敗している可能性があります。試してみてください:

if($scan) { 
    if(mysql_num_rows($scan) > 0) { 
    //... 
    } 
} else { 
    trigger_error(mysql_error()); 
}; 
+0

これは私が受け取ったエラーです SQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、右の構文を使用して '' 1行目近くで使用してください。 – acctman

+0

あなたが実行しているSQL文は無効であり、SQLインジェクション機能もあります。 PDOを使用してください;-) – Rahly

+0

@JeremyあなたがリクエストにelmIDを持っていない可能性が高いです。このコードの先頭に 'error_reporting(E_ALL);'を追加して、このような愚かな間違いを知らせてください。 –

1
 
$scan = mysql_query("SELECT `id`, `state` FROM `mast_state` WHERE `countryid` = '".mysql_real_escape_string($cid)."'"); 

しかし、実際に、PDOを使用します。

 
$stm = $db->prepare("SELECT `id`, `state` FROM `mast_state` WHERE `countryid` = ?"); 
if($stm && $stm->execute(array($cid))) { 
    while($data = $stm->fetch(PDO::FETCH_ASSOC)) { 

    } 
} 
+0

彼は見つけられた行の数を知りたかったのですか? –

+0

行数が0より大きいかどうかを調べるのは、hesと同じようには見えません。クエリが何かを返すかどうかを調べるだけの一般的な表示です。行数を取得するには$ stm-> rowCountだけでした。 – Rahly

関連する問題