Ошибка строк в MySQL - PullRequest
       6

Ошибка строк в MySQL

0 голосов
/ 11 июля 2011
$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 (); насколько я могу судить, я думаю, что у меня правильный синтаксис, но я все еще получаю ошибку. Любая помощь?

Ответы [ 2 ]

5 голосов
/ 11 июля 2011

Первый запрос неверен.
Также ваша вставка не верна.
Попробуйте это:

$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 DUPLICATE KEY UPDATE .

0 голосов
/ 11 июля 2011

В 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

...