我以前遇到过这个问题,并且不能为我的生活找出导致它的原因。我有一个看起来像这样的PDO语句
$fields = "
`ProgramName` = :programName,
`TotalUnits` = :totalUnits,
`UnitCost` = :unitCost,
`Description` = :description,
`CreationDate` = NOW()
";
$description = isset($_POST['description']) ? $_POST['description'] : null;
$insertProgram = $dbHandle -> prepare("INERT INTO `Programs` SET $fields");
$insertProgram -> bindParam(':programName', $_POST['programName'] );
$insertProgram -> bindParam(':totalUnits' , $_POST['totalUnits'] );
$insertProgram -> bindParam(':unitCost' , $_POST['unitCost'] );
$insertProgram -> bindParam(':description', $description );
$insertProgram -> execute();
错误是通用的旧“
语法错误或访问冲突:1064 ...请查看手册以了解要在附近使用的正确语法。
`ProgramName` =?,
`TotalUnits` =?,
第1行的“Uni”
看看它切断了“UnitCost”的位置,甚至认为它是$ fields中完美格式化的字符串?世界上有什么原因造成的?我正在我的所有列名称上使用反向标记...
答案 0 :(得分:1)
我无法重现您的错误。
对于像这样的查询
INERT into test SET foo='11111111111111111111111111111111111', bar='2222222222222222222222222222222';
它给了我错误
在'INERT附近使用正确的语法进入测试SET foo ='1111111111111111111111111111111111'',bar ='222222222222'在第1行
符合我的经验,当mysql显示紧跟问题部分的查询部分时。
你的问题“为什么mysql完全切断原始查询”的答案相当简单:查询可能长达2兆字节甚至更长。而且您显然不希望出现该大小的错误消息。