0
$result = mysql_query("SELECT FROM table WHERE job_id = '$key'") or die("Error: ". mysql_error(). " with query ". $query);
    $num_rows = mysql_num_rows($result);
    if($num_rows > 0) {
        mysql_query("UPDATE table SET row = '$value' WHERE job_id = '$key'");
        }else{
        mysql_query("INSERT INTO table SET row = '$value', job_id = '$key'");
        }

データベースに既存のレコードがあるかどうかを確認する必要があります。レコードがない場合は作成します。これを実行するたびに、次のようになります。

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in my/web/directory/index.php on line 147

私はこのウェブサイトの既存の投稿を調べましたが、それらのほとんどは、ユーザーが構文に問題を抱えていることに関係しています。mysql_query();を忘れるなど。私が知る限り、構文は正しいと思いますが、それでもエラーが発生します。何か助けはありますか?

4

2 に答える 2

5

最初のクエリは正しくありません。
また、挿入が正しくありません。
これを試して:

$result = mysql_query("SELECT * FROM table WHERE job_id = '$key'") or die("Error: ". mysql_error(). " with query ". $query);
    $num_rows = mysql_num_rows($result);
    if($num_rows > 0) {
        mysql_query("UPDATE table SET row = '$value' WHERE job_id = '$key'");
        }else{
        mysql_query("INSERT INTO table VALUES ('$value', '$key')");
        }

INSERT ... ON DUPLICATEKEYUPDATEを使用することもできます。

于 2011-07-11T13:59:09.073 に答える
0

MySqlには、行がまだ存在しない場合は行を作成する構文があり、存在する場合は更新する構文があります。あなたの場合、あなたはこのようなことをすることができます:

$result = mysql_query("INSERT INTO table (job_id, row) 
   VALUES ('$key', '$value')  ON DUPLICATE KEY UPDATE row='$value';

これは通常、データベースに対して半分の量のクエリを実行し、競合状態で複数のスレッドが誤って行を複数回追加するリスクがないため、望ましい方法です。

あなたはでもっと読むことができます:

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2011-07-11T14:08:05.820 に答える