何时使用PDO exec()vs execute()vs query()

awg*_*awg 2 php mysql pdo prepared-statement

以下是使用这些方法的W3示例的片段(带有链接)。我不禁要问,我花费大量时间学习的资料是否是最新,最常用的约定。

此Stack Overflow帖子。但是,这篇文章没有回答何时使用上述方法。它也提倡出于给定的理由仅使用prepare()/ execute()。如果是这样,则似乎暗示W3中的示例已过时。作为一个试图学习的学生,我发现W3是用户友好的。我喜欢将信息组织成段而不需要大量的细节(因此,由于这个原因,我现在不希望引用php.net或类似的东西)。另外我还被告知W3Schools是最新的(对我来说,这再次意味着传统上使用它并不一定具有优势),并且如果他们同意,我很想听听经验丰富的程序员的意见。

我是否希望示例中使用的方法被认为是“最佳实践”,还是SO帖子在右上方,为什么?

W3school示例:

MySQL 创建表使用exec():

// use exec() because no results are returned
$conn->exec($sql);
echo "Table MyGuests created successfully";
Run Code Online (Sandbox Code Playgroud)

MySQL 更新数据使用准备好的语句和execute():

// Prepare statement
$stmt = $conn->prepare($sql);

// execute the query
$stmt->execute();

// echo a message to say the UPDATE succeeded
echo $stmt->rowCount() . " records UPDATED successfully";
Run Code Online (Sandbox Code Playgroud)

MySQL Select Data使用query()如下:

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
Run Code Online (Sandbox Code Playgroud)

发布脚本上下文:这是我的第一篇SO帖子,希望对您有所帮助。我正在使用W3Schools和HTML / CSS / Javascript / PHP学习MySQL,这是我正在学习的在线Internet编程学院课程的指定资源。这是老师第一次教这门课,他当然很生锈。我喜欢在可能的时候亲自去他的办公室问问题,因为我发现沟通起来更容易。但是,这常常导致他在那时进行谷歌搜索,这使我想知道他给出的所有答案是否只是他发现谷歌搜索的第一件事,而不是被认为是最佳实践的答案(我希望如此)。多年后,我回到大学,攻读计算机科学的第二学位。不过这次

Mik*_*ike 8

我制作了一个流程图,以尝试帮助您确定在任何给定情况下应使用哪个:

在此处输入图片说明

我们必须PDOStatement::prepare()对用户数据使用和绑定变量的原因是为了防止SQL注入攻击。您永远不应将用户输入直接放入查询中。实际上,这只是个人喜好,但是即使我将值硬编码到查询中,我也通常会使用它PDOStatement::prepare()。也许今天我正在对其进行硬编码。明天我将其从数据库中拉出,然后再允许用户编辑数据库中的该字段。但是我会记得回去更新查询以使用准备好的语句吗?可能不会。将变量绑定到查询还可以防止查询中的意外语法错误。

PDOStatement::prepare()当使用不同的变量重用查询时,之所以使用它,是因为执行此操作时,它会将准备好的语句发送到数据库服务器,而不是值。当你execute()PDOStatement你然后发送值到数据库服务器。因此,对于后续查询,您需要发送的只是值而不是整个查询。

但是,如果您决定使用PDO::query()而不是PDO::exec(),或者如果您使用PDOStatement::prepare()而不是其他两个中的任何一个,则这不是安全问题,而更多是效率问题。

PS对不起,鼠标。