【发布时间】:2011-12-26 11:30:34
【问题描述】:
在 MySQL 中是否可以在单个查询中更新单个字段并选择多个不同的字段,其中单个条件为真?我不确定正确的 SQL 应该是什么,但如果可能的话,我当然想合并这两个示例查询。
示例
更新查询:
UPDATE `users` SET `activation`='$activationCode' WHERE `email`='$anEmail'
还有一个选择查询:
SELECT `password`,`salt`,`fname`,`email` FROM `users` WHERE `email`='$anEmail'
在这里看到重复的条件?当我可以在一个条件下一次完成所有操作时,肯定没有必要用重复的条件查询 MySQL 数据库两次吗?
值得注意的是,$anEmail 和 $activationCode 将是以前在 PHP 中定义的变量(前者在两个查询中也完全相同)。干杯。
【问题讨论】:
-
PHP 变量名称表明您将值直接插入到语句中。不要那样做。使用准备好的语句(PDO 和mysqli 支持)将数据与语句分开。在众多好处中,这可以通过值防止SQL injection。
-
@outis 好的,你能给我任何关于在 mysqli 中使用准备好的语句的教程的链接吗?我试过看,但大多数都无法解释它们是如何工作和运行的。
-
我知道 PDO 的教程,但没有 mysqli 的教程。网络搜索会给您比 I 更好的结果。有关概念性概述,请阅读 Parallels Between Prepared Statements and Functions。准备好的陈述并不多。你不需要知道它们是如何工作的,你只需要知道如何使用它们。
-
@outis,谢谢 - 我本来打算使用 MySQLi,但后来我被说服了,现在将尝试 PDO。再次感谢。
-
PDO 更好用,我发现。一方面,
PDOStatement实现了Traversable,这意味着您可以使用foreach循环遍历结果。