尽管使用了mysql_real_escape_string,但PHP使用字符串查询MySQL问题

tuc*_*son 1 php mysql

以下SQL查询:

INSERT INTO `database`.`table` (`param1`, `param2`) 
VALUES (
'??????? ?????? – ???????? ???????? ?? ???????????? ????? ??????, ????????, ??????, ????? ????????????, ???????.\r\n???????? ?????????? ? ????????????, ????, ????????, ?????? ? ???????????? ????????????.\r\n?????????? ?? ????????? ?????????, ???????? ??????? ?????????????. \', 
'??????? ????????? ??????, ?????, ?????? ?????? ??????, ???????????? ? ??????, ????????? ??????, ??????? ???? ? ??????, ?????? ? ??????, ????????, ??????, ????? ? ??????, ????? ??????, ??????? ??????, ??????? ?????, ?????? ? ??????, ??????? ?????, ??????? ??????? ??????, ??????');
Run Code Online (Sandbox Code Playgroud)

失败并显示错误消息:

您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便在第1行'Томскийгородскойпортал,Томск,Порталгор'附近使用正确的语法

我在字符串上使用了mysql_real_escape_string,然后在SQL查询中使用它们,所以我认为这足以使它们没有错误.

我的数据库设置为使用

utf8_general_ci

作为这些字段的排序规则.

查询有什么问题?

Pas*_*TIN 6

你正在逃避'它应该关闭param1的值(values子句中的第一个值):

INSERT INTO `database`.`table` (`param1`, `param2`) 
VALUES (
'...?. \',   <= there
'...??');
Run Code Online (Sandbox Code Playgroud)


您应该在结束之前删除它\',因此您的查询如下所示:

INSERT INTO `database`.`table` (`param1`, `param2`) 
VALUES (
'...?. ', 
'...??');
Run Code Online (Sandbox Code Playgroud)


\,而不是引号是字符串分隔符-逃避字符串引号内是必要的.