PHP PDO准备语句分号

时间:2013-01-03 22:42:09

标签: php mysql pdo

我有一个问题,我无法自己回答。我最近遇到的问题类似于Why does PDO::lastInsertId return 0?处的用户问题。与该用户一样,我的问题是通过从PDO准备语句的末尾删除分号来解决的。

我想知道是否有人可以向我解释为什么上面的帖子中的预备语句不应该有分号来终止它们。我使用了许多带有分号的PDO预处理语句,直到几天才出现问题。我在PDO文档中找不到有关分号使用的任何内容,因此我对是否使用它们的基本原则感到困惑。在准备好的陈述中使用分号总是一个坏主意吗?如果是这样,为什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

我的代码中全部都有分号。

他们工作正常。

您关联的问题中接受的答案是错误

答案 1 :(得分:2)

  

我想知道是否有人可以向我解释为什么上面的帖子中的预备语句不应该有分号来终止它们。

这很难,因为实际上你说的只是明白错误。准备好的语句以分号结束没有问题。

所以,当你想知道时,不要再怀疑了。没有什么可以解释分号。它只是一个分隔符。例如,我可以运行以下准备就好了:

$stmt = $conn->prepare('
INSERT INTO config (`option`) VALUES (:option);;;;;
');
$result = $stmt->execute([':option' => "Insert Option " . uniqid() ]);

$resultbool(true),插入行。你还没有分享你的代码,因此你很难分辨你做了什么以及你失败了什么,但是你可以看到分号甚至可以堆叠起来。

  

我使用了许多带有分号的PDO预处理语句,直到几天才出现问题。

这是一个明确的迹象,分号实际上不是问题。否则所有查询必须从一开始就已经失败。

  

我在PDO文档中找不到有关分号使用的任何内容,因此我对是否使用它们的基本原则感到困惑。在准备好的陈述中使用分号总是一个坏主意吗?如果是这样,为什么?

因为它是SQL的一部分。请参阅您正在使用的数据库服务器的SQL文档。它确实概述了使用分号的所有荣耀细节。只是这不是PDO本身的一部分,因此没有PDO记录,而是数据库服务器。