使用JSON更新记录时出现MySQL语法错误

时间:2021-07-23 14:27:03

Im mainly a JavaScript guy and im building a library for a client and the library caches some data in MySQL per HTTP_REFERRER. If the data is different than it is on the server it updates the cache. I don't know what exactly I'm doing wrong but its saying there is a syntax error with this:

我主要是一个JavaScript人,我正在为客户端构建一个库,并且该库根据HTTP_REFERRER在MySQL中缓存一些数据。如果数据与服务器上的数据不同,则更新缓存。我不知道我到底做错了什么,但它说这有一个语法错误:

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); }

The error Im getting is:

我得到的错误是:

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 '(cache) SET ('[{\"LatLng\":{\"Ba\":45.531124,\"Ca\":-122.68374699999998},\"InfoW' at line 1

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'(缓存)SET('[{\“LatLng \”:{\“Ba \”:45.531124,\“Ca \”: - 122.68374699999998}附近使用正确的语法,“InfoW”在第1行

The data being sent looks like (before being stripped and slashes added, of course):

发送的数据看起来像(当然,在被剥离和斜杠之前):

[{"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


1  

You don't have the field you wish to set:

您没有要设置的字段:

UPDATE `cache-test` SET field_name = 'your huge val'

#2


0  

Replace addslashes with:

将addslashes替换为:

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));

#1


1  

You don't have the field you wish to set:

您没有要设置的字段:

UPDATE `cache-test` SET field_name = 'your huge val'

#2


0  

Replace addslashes with:

将addslashes替换为:

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));