0

重複の可能性:
mysql_fetch_array() は、パラメーター 1 がリソースであると想定しており、select でブール値が指定されています

ちょっとユニークなヒットカウンターを作っています。

<?php  
$ip_add = $_SERVER['REMOTE_ADDR'];

function ip_exists($ip){
  global $ip_add;
  $query = "SELECT 'ip_count' from 'count_ip' where 'ip_count' = '$ip_add'";
  $query_run = mysql_query($query);
  $query_num_rows = mysql_num_rows($query_run);

  if($query_num_rows == 0){
    return false;
  }
  else if($query_num_rows >= 1){
    return true;
  }
}

if(ip_exists($ip_add)) {
  echo " exists";
} else {
  echo "doesnt";
}
...

このエラーが発生しています:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in 
C:\wamp\www\php\Hit Counter\index.php on line 18

エラーはここにあります:

$query_num_rows = mysql_num_rows($query_run);
4

4 に答える 4

2

まず、エラー メッセージに、SQL に構文エラーがあるため、SELECT クエリに対してブール値が返されるboolean given唯一の理由mysql_query()は、クエリが失敗した場合であることがわかります。一部の一重引用符をバッククォートに変更する必要があります。

$query = "
  SELECT `ip_count`
  FROM `count_ip`
  WHERE `ip_count` = '$ip_add'
";

オブジェクト名 (列、テーブルなど) はバックティック ` で囲む必要があります。一重引用符で囲まれたものはすべてリテラル文字列として扱われます。

クエリの失敗を確認する必要があります。

$query_run = mysql_query($query);
if (!$query_run) {
  // Handle error here
}
$query_num_rows = mysql_num_rows($query_run);

いくつかの追加コメント:

于 2012-05-15T18:39:44.567 に答える
1

をテストqueryして、正しく実行されていることを確認します。

<?php
...
$query_run = mysql_query($query);
if (!$query_run) {
  die('Invalid query: ' . mysql_error());
} else {
  // continue your code
}
?>

このように、クエリが失敗した場合、分析のためのフィードバックを得ることができます!

これを参照してください: mysql_query の例、#1 無効なクエリ

于 2012-05-15T18:41:50.847 に答える
0

mysql_query()クエリが成功したかどうかに関係なく、ブール値を返します。正しい引数を渡したい場合は、接続ハンドラを変数に割り当てて渡す必要があります。

$conn = mysql_connect()...
...
$query_num_rows = mysql_num_rows($conn);

もう関数を使うべきではありませんがmysql_*!あなたの質問に対する私のコメントを見てください!

于 2012-05-15T18:41:20.910 に答える
0

実際、クエリには構文エラーがあり、$query_run() は実際の出力ではなくエラーを返します。クエリで引用符を使用するときは注意が必要です。クエリを次のように置き換えます。

$query = "SELECT ip_count from count_ip where ip_count='$ip_add'";

$ip_add が文字列でない場合は、そこでも単一引用符を避けてください。フィールド名またはテーブル名を記述する場合は、引用符を避けてください。文字列を書くところだけ引用符が必要です。

于 2012-05-15T18:43:12.187 に答える