4

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

だから私は次のクエリが結果を返すかどうかを確認しようとしています

  $numUsersSameRatingQuery="SELECT * `user ratings` WHERE  category='$category' AND categoryId='$categoryId' AND  `userAromaRating`>0 ";

  $result=mysql_query($numUsersSameRatingQuery);

   $numResults=mysql_num_rows($result);

  if($numResults==0)
  {
   // do the INSERT INTO
  }
  else
  {
   //do the UPDATE SET
  }

ただし、上記は次のエラーを返し、if($numResults)とにかく毎回実行されます。つまり、elseブロックを実行することはできません。

これがエラーです

 Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\boozeDb\profileThis.php on line 141

助けていただければ幸いです。

4

3 に答える 3

8

is_resourceそれがリソースであることを確認するために使用できます。または、ifステートメントを使用して、それFALSEが返されなかったことを確認することもできます。

エラーを表示するには、 を使用しますmysql_error

例:

<?php

// From http://ca2.php.net/manual/en/function.mysql-query.php

$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
    trigger_error('Invalid query: ' . mysql_error());
}
于 2011-09-27T17:56:19.650 に答える
2

mysql_query() は、ステートメント ハンドル (クエリが成功した場合) またはブール値の FALSE (クエリが失敗した場合) を返します。あなたのコードはエラー状態をチェックせず、やみくもに成功を想定しています。コードを次のように変更します。

$result=mysql_query($numUsersSameRatingQuery) or trigger_error(mysql_error());
                                             ^^^^^^^^^^^^^^^^^^^^^^--- add this

サンプル クエリを考えると、キーワードが欠落しておりFROM、おそらく次のようになるはずです。

SELECT * FROM `user ratings`
        ^^^^^^

スペースを含むフィールド名を使用しないことを強くお勧めします彼らはただのトラブルです。

于 2011-09-27T17:56:28.970 に答える
0

他のみんながコメントしているように、ifステートメントまたは「ordie()」はそのエラーを二度と生成しないのに役立ちますが、エラーはおそらくクエリに「FROM」がないことに起因します。

テーブル内の一部またはすべての列が重複しないようにするために、SELECTとINSERTの2つのクエリを実行しているという事実にコメントする必要があると感じました。これは1つのクエリで実行でき、コードを高速化します。

INSERT ..(挿入したいもの).. ON DUPLICATE KEY UPDATE ..(すでに存在する場合は何を更新するか)..

詳細については、MySQLのマニュアルページをご覧ください。

于 2011-09-27T19:40:48.447 に答える