mysql_affected_rows (); не работает для проверки, если строка существует - PullRequest
0 голосов
/ 05 сентября 2011

Я использую mysql_affered_rows (), чтобы проверить, нужно ли мне вводить новую запись или обновлять существующую, но проблема в том, что пользователь пытается ввести точно такие же данные, что и уже существующая запись, в которую он запускает вставку.

$result = mysql_query("update Data set Score='$score',Comment='$_POST[Comments]' where Date='$_POST[forDay_3]-$_POST[forDay_1]-$_POST[forDay_2]' AND User='$_POST[UserID]';");
$last = mysql_affected_rows();

if ($last==0) {

    $result1 = mysql_query("INSERT INTO Data (User,Date,Score,Comment) VALUES ('$_POST[UserID]','$_POST[forDay_3]-$_POST[forDay_1]-$_POST[forDay_2]','$score','$_POST[Comments]')");

что мне делать, чтобы избежать избыточных записей

Ответы [ 3 ]

0 голосов
/ 05 сентября 2011

некоторые решения:

  1. добавьте еще один запрос, чтобы посмотреть, существуют ли данные, а затем решите, хотите ли вы выполнить какое-либо действие (обновить / удалить) или ничего.
  2. добавить «измененный» столбец с типом «TIMESTAMP» и сделать его при обновлении - CURRENT_TIMESTAMP

Я бы выбрал первый вариант.

Кстати, вы должны экранировать свои почтовые данные (mysql_real_escape_string), чтобы предотвратить внедрение или некорректную строку запроса

0 голосов
/ 05 сентября 2011

Вы можете получить количество затронутых строк с FOUND_ROWS() вместо mysql_affected_rows(). Последний также учитывает неизмененные строки.

$result = mysql_query("update Data set Score='$score',Comment='$_POST[Comments]' where Date='$_POST[forDay_3]-$_POST[forDay_1]-$_POST[forDay_2]' AND User='$_POST[UserID]';");
$last = mysql_query("SELECT ROW_COUNT();");
$last = mysql_fetch_array($last);
...

Ссылка: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

0 голосов
/ 05 сентября 2011
  1. Вы можете проанализировать mysql_info() вывод (но само решение будет зависеть от проблемы состояния гонки)
  2. Вы можете создать уникальный ключ User + Date и получить один запрос, используя ON DUPLICATE KEY UPDATE синтаксис:

    INSERT INTO `Data` (User,Date,Score,Comment)
    ('$_POST[UserID]','$_POST[forDay_3]-$_POST[forDay_1]-$_POST[forDay_2]','$score','$_POST[Comments]')
    ON DUPLICATE KEY UPDATE Score='$score',Comment='$_POST[Comments]'
    
...