请注意,这不是重复的问题,因为有关此错误的所有其他问题都与必须转义的保留字有关,但情况并非如此。
我有一个普通查询,它是字符串的连接加上使用 file_get_contents 的文件内容,查询将如下所示:
CALL sp_student_booking_application_attachment_insert(
'foreignkey code', -- varchar(255)
'filename.pdf', -- varchar(255)
'application/pdf', -- varchar(255)
file content, -- longblob: not quoted
file_size -- integer(11): not quoted
);
存储过程只是看起来完全相同的插入语句的包装器。
出于同样的原因,如果我上传一个 10kb 的相对较小的文件,它可以工作,但是它不适用于任何其他更大的文件,但我也能够上传 200kb 的 PDF,如果我使用另一个,请注意一个特定的 pdf pdf即使更小也不起作用。我得到的唯一错误是:
SQLSTATE[42000]: Syntax error or access violation: 1064 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 '?s(??\n??W?hcvӔ???.???a&??5+\"+w?? c??-?ƄqܷL,???-L?b?|)??K?71' at line 5
所以我尝试使用''和使用'引用文件内容值,但我仍然遇到同样的问题。但是,当我尝试通过 phpmyadmin 上传文件时,它甚至会上传 2mb 的文件。
可能有用的是,此图像/文件正在通过 json 变量上的 soap 服务传输,并且文件内容是 base64 编码的,然后在soap服务器上将其解析为 json 并解码 base64。我已经检查过了,Soap 客户端/soap 服务器两边的文件大小相同,所以不是 php 或soap 相关的问题。
在 my.conf 中,max_allowed_packet 为 996776960。