2011-08-08 9 views
0

selectが1行を取得する必要があります。しかし、私は行数をエコーすることさえできません。mysql_num_rows():指定された引数が有効なMySQL結果リソースではありません

私はそれを行うことができますどのようにmysql_num_rows(): supplied argument is not a valid MySQL result resource

を取得しますか?

$result="SELECT * FROM Users WHERE User = '$user' AND Password = '$hash' LIMIT 1"; 
$num_rows = mysql_num_rows(resource $result); 
echo $num_rows; 
+0

あなたは 'mysql_ *'を使用すべきではありません。これは廃止予定です。 –

+1

@Rikudo私は技術的に推奨されていないとは思わないが、[MySQLi](http://php.net/mysqli)や[PDO](http://php.net/pdo)など、 。 – Wiseguy

+0

これは、公式に非公式に廃止されたPHPの項目です。 –

答えて

1

実行結果を取得する前に、SQLクエリをmysql_query()で実行する必要があります。


だから、基本的に、あなたのコードは次のようになります。

// This is a QUERY, not a RESULT 
$query = "SELECT * FROM Users WHERE User = '$user' AND Password = '$hash' LIMIT 1"; 

$result = mysql_query($query); // execute query => get a resource 
if ($result) { 
    // query has been executed without error 
    $num_rows = mysql_num_rows($result); // Use the result of the query's execution 
    echo $num_rows; 
} 
else { 
    // There has been an error ; deal with it 
    // for debugging, displaying the error message is OK : 
    echo mysql_error(); 
} 
1

をあなたは、あなたが結果セットの行数を取得することができ、最初のSQLクエリを実行する必要があります。

$mysql_result = mysql_query($result); // Do this first, then you can 
$num_rows = mysql_num_rows($mysql_result); 
+1

実際に$ resultを$ query – Zak

+1

にリネームして、実際には直接mysql呼び出しを使用しないでください。PDO – Zak

0

試してみてください。

$result = mysql_query("SELECT * FROM Users WHERE User = '$user' AND Password = '$hash' LIMIT 1"); 

また、実行した後、問合せで、エラーがないかどうかを確認します。 $resultはその場合のリソースではありません(実際はFALSEです)。エラーの詳細を取得するには、mysql_error()を呼び出す:

$query = "SELECT * FROM Users WHERE User = '$user' AND Password = '$hash' LIMIT 1"; 
$result = mysql_query($query); 
if ($result === FALSE) 
    die("Error in query $query: " . mysql_error()); 

それは、これらのエラー処理ルーチンがないを行うこと、しかし、あなたの責任です、これは、データベースのレイアウトを伝播するだろうとして、生産コードにそれを作ります。また、クエリに補間された変数が適切にエスケープされているかどうかを確認します(そのためにmysql_real_escape_string()を使用)。ここで

+0

を使用してください。結果があるかどうかテストする条件を作りますか? – lisovaccaro

+0

@Lisoあなたのコードスニペットと同じように、 '$ num_rows = mysql_num_rows($ result);'。 –

1

は、クリーンな方法

$st = "SELECT COUNT(1) FoundCount FROM Users WHERE User='$user' AND Password='$hash'"; 
$result = mysql_query($st); 
$row = mysql_fetch_assoc($result); 
$rowfound = $row['FoundCount']; 

はそれを試してみるです!