PDO在我的MySQL语句中途抛出未被捕获的异常

时间:2016-09-27 15:26:40

标签: php mysql pdo

我以前遇到过这个问题,并且不能为我的生活找出导致它的原因。我有一个看起来像这样的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中完美格式化的字符串?世界上有什么原因造成的?我正在我的所有列名称上使用反向标记...

1 个答案:

答案 0 :(得分:1)

我无法重现您的错误。

对于像这样的查询

INERT into test SET foo='11111111111111111111111111111111111', bar='2222222222222222222222222222222';

它给了我错误

  

在'INERT附近使用正确的语法进入测试SET foo ='1111111111111111111111111111111111'',bar ='222222222222'在第1行

符合我的经验,当mysql显示紧跟问题部分的查询部分时。

你的问题“为什么mysql完全切断原始查询”的答案相当简单:查询可能长达2兆字节甚至更长。而且您显然不希望出现该大小的错误消息