MySQL обновить или вставить или умереть запрос - PullRequest
1 голос
/ 20 мая 2011

Допустимо ли делать что-то подобное, я никогда не вижу больше 1 или оператора:

$insert = 'INSERT into fhours (' .$cols . ') VALUES ('.$query.')';
$update = sprintf("UPDATE fhours SET %s WHERE fname='$fname' AND lname='$lname'", $field_list);

$result = $db->query($update) or $db->query($insert) or die('uhoh');`

Ответы [ 4 ]

3 голосов
/ 20 мая 2011

С этим связаны две проблемы.

Во-первых, вы можете использовать параметризованные запросы. Посмотрите на PDO, это вам очень поможет .Это не только быстрее для нескольких вставок, но вам не нужно так сильно беспокоиться о внедрении SQL.

Во-вторых, вы можете использовать MySQL ON DUPLICATE KEY UPDATE, чтобы позаботиться оэтот вопрос для вас.В противном случае, когда ваш запрос не удался, вы не знаете, почему он потерпел неудачу.Возможно, это не было проблемой с дубликатом ключа!

Кроме этого, код с точки зрения or просто отлично.

0 голосов
/ 20 мая 2011

Возможно, вы захотите изучить замену mysql на синтаксис

0 голосов
/ 20 мая 2011

Это действительно? Да. Это рекомендуется? Нет.

Проблема с die() -ing из-за неудачного SQL-запроса заключается в том, что пользователь видит в конечном итоге, что является ужасным экраном, на котором может быть только небольшой объем текста. Это очень плохо.

Вместо этого вы должны обрабатывать эти ошибки таким образом, чтобы вы могли передать пользователю сообщение об ошибке завершения:

$update_result = $db->query($update);
if(!$update_result) {
  // Yikes! Tell the user something went wrong!
  // Show them an error page or error message
}

$insert_result = db->query($insert);
if(!$insert_result) {
  // Yikes! Tell the user something went wrong!
  // Show them an error page or error message
}

На самом деле, также рекомендуется взглянуть на set_error_handler , который позволяет вам фиксировать фатальные ошибки PHP и вместо того, чтобы показывать ужасные ошибки, которые потенциально могут подвергнуть ваш путь php следующим образом:

Неустранимая ошибка: невозможно использовать assign-op операторы с перегруженными объектами ни смещения строк в /check/out/my/directory/structure/wp-admin/includes/file.php по линии 688

Вы можете отправить их на страницу с общей ошибкой, которая выглядит более профессионально.

0 голосов
/ 20 мая 2011

Вы можете связать столько логических операторов, сколько захотите.

Вы также должны принять во внимание механизмы mysql "на дубликате ключа".

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

...