-3

我有一个我自己无法回答的问题。我最近遇到了一个类似于用户在为什么 PDO::lastInsertId 返回 0 的问题?. 像那个用户一样,我的问题通过从 PDO 准备语句的末尾删除一个分号来解决。

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

谢谢!

4

2 回答 2

2

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

那会很难,因为实际上您所说的完全是错误的。以分号结尾的准备好的语句没有问题。

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

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

使$result存在bool(true),行被插入。你还没有分享你的代码,所以很难说你做了什么,什么失败了,但是你可以看到分号甚至是为了好玩而堆叠起来。

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

这清楚地表明分号实际上不是问题。否则,所有查询必须从一开始就已经失败。

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

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

于 2013-01-03T23:02:40.273 回答
2

我的代码中到处都是分号。

他们工作正常。

您的链接问题中接受的答案是错误的。

于 2013-01-03T22:43:26.173 回答