Синтаксическая ошибка MySQL при ОБНОВЛЕНИИ записи с помощью JSON - PullRequest
0 голосов
/ 30 мая 2011

Я в основном парень с JavaScript и создаю библиотеку для клиента, и библиотека кэширует некоторые данные в MySQL по HTTP_REFERRER. Если данные отличаются от данных на сервере, они обновляют кэш. Я не знаю, что именно я делаю неправильно, но он говорит, что есть синтаксическая ошибка с этим:

if(mysql_query("UPDATE `cache-test` (cache) SET ('".addslashes(preg_replace('/\s\s+/', ' ', $referrer['cache']))."') WHERE url = '".$referrer['current']."'",$con)){ echo "saved"; }
else { echo mysql_error($con); }

Ошибка, которую я получаю:

У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '(кеш) SET (' [{\ \ LatLng \ ": {\" Ba \ ": 45.531124, \" Ca \ ": - 122.68374699999998} \ "InfoW 'в строке 1

Отправляемые данные выглядят так (перед разборкой и добавлением слешей, конечно):

[{"LatLng":{"Ba":45.531124,"Ca":-122.68374699999998},"InfoWindow":"\n        <address>1125 NW 12th Ave, Portland, OR</address>\n        <p>My first apartment</p>\n      ","originalAddress":"1125 NW 12th Ave, Portland, OR"},{"LatLng":{"Ba":45.5144501,"Ca":-122.67644239999998},"InfoWindow":"\n        <address>1230 SW 2nd Ave, Portland, OR</address>\n        <p>My 2nd apartment</p>\n      ","originalAddress":"1230 SW 2nd Ave, Portland, OR"},{"LatLng":{"Ba":45.748955,"Ca":-122.47959000000003},"InfoWindow":"\n        <address>17501 NE 188th Ct, Brush Prairie, WA</address>\n        <p>The first place I lived by my own</p>\n      ","originalAddress":"17501 NE 188th Ct, Brush Prairie, WA"},{"LatLng":{"Ba":45.756944,"Ca":-122.43575800000002},"InfoWindow":"\n        <address>18607 NE Erickson Rd, Brush Prairie, WA</address>\n        <p>Last place I lived with my parents</p>\n      ","originalAddress":"18607 NE Erickson Rd, Brush Prairie, WA"}

Ответы [ 2 ]

1 голос
/ 30 мая 2011

У вас нет поля, которое вы хотите установить:

UPDATE `cache-test` SET field_name = 'your huge val'
0 голосов
/ 30 мая 2011

Заменить addlashes на:

mysql_real_escape_string()

$cache = mysql_real_escape_string(preg_replace('/\s\s+/', ' ', $referrer['cache']));

mysql_query("UPDATE `cache-test`  
            SET (cache = '$cache') 
          WHERE url = '".$referrer['current']."'",$con));
...