Синтаксис запроса UPDATE

Рейтинг: 1Ответов: 2Опубликовано: 16.01.2015

Прошу помощи с синтаксисом запроса UPDATE.

Есть таблица system_contacts с 22 полями. Пытаюсь обновить некоторые из них, получаю ошибку:

Warning: mysql_query(): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( 'company_name' = 'rr', 'company_address' = '', 'company_person'' at line 2 in D:\data\contact_edit.php on line 23 Ошибка - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( 'company_name' = 'rr', 'company_address' = '', 'company_person'' at line 2

Запрос в contact_edit.php:

  $query = "UPDATE system_contacts                
    SET (
    'company_name' =    '".$_POST["company_name"]."',
    'company_address' = '".$_POST["company_address"]."',
    'company_person' =  '".$_POST["company_person"]."',    
    'phone_1' =         '".$_POST["phone_1"]."',
    'phone_2' =         '".$_POST["phone_2"]."',
    'phone_3' =         '".$_POST["phone_3"]."',
    'phone_4' =         '".$_POST["phone_4"]."',
    'phone_5' =         '".$_POST["phone_5"]."',
    'work_time' =       '".$_POST["work_time"]."',
    'skype' =           '".$_POST["skype"]."',
    'site' =            '".$_POST["site"]."')
    WHERE 'id_position' = '45'
    ";

  $usr = mysql_query($query);                 // строка 23
  if(!$usr) exit ("Ошибка - ".mysql_error());

Перерыл всё, что мог. В чем может быть ошибка и где копать?

Ответы

▲ 2Принят

Уберите скобки после слова SET и перед словом WHERE. У вас даже в сообщении ошибки это написано.

А еще, когда вы дебажите SQL и у вас возникают проблемы, то просто сделайте вывод SQL запроса на экран, скопируйте и попробуйте вставить его напрямую. Часто бывают лишние запятые, не те кавычки, апострофы вместо обратной кавычки в названиях полей. Куча синтаксических ошибок при ручном формировании запросов.

Upd: а еще у вас на лицо SQL инъекция, так как ваши данные из POST массива никак не обрабатываются, прочитайте про prepared statements и начните использовать PDO.

▲ 1

Вот так, как Вы пишите, лучше не делать - гарантированный путь к sql инъекции. Собственно в данном случае Вы ее, похоже, и словили. Если любая из переменных в POST будет содержать одинарную кавычку, то запрос будет выглядеть не совсем так, как Вы думаете. Скорее всего, переменная $_POST["company_address"] содержит левое.

Что делать?

Первое - распечатайте значение переменной query, ее значение немного прояснит ситуацию. Также распечатайте var_dump($_POST).

Второе - перейдите на использование pdo, и Ваши запросы будут чище, красивее и безопаснее.

Третье - если все-таки хочется писать по-старому, не забывайте экранировать строки, но это устаревшее, и для пхп не рекомендуют использовать этот способ.