繁体   English   中英

添加额外条件检查时的SQL查询语法

[英]SQL Query Syntax when adding extra condition check

我正在尝试编写一个提取ID和日期的SQL查询。 我在语法正确方面遇到一些麻烦:

$query = $this->pdo->prepare('SELECT * FROM `' . $this->table . '` WHERE `id` = ' . $id . ' AND `date` = ' . $date . '');

我最初没有对日期进行第二次检查就可以了,它工作得很好:

$query = $this->pdo->prepare('SELECT * FROM `' . $this->table . '` WHERE `id` = ' . $id . '');

但是当我添加日期支票时,出现了问题。

请帮助我找到语法错​​误。 谢谢!

更新:

仍然没有运气尝试过这个:

$query = $this->pdo->prepare('SELECT * FROM `' . $this->table . '` WHERE `id` = `' . $id. '` AND `date` = `' . $date . '` ');

正如其他人在上面的评论所述,您在日期前后没有报价。 您的语法将创建以下SQL:

... WHERE `id` = 123 AND `date` = 2018-06-12 -- WRONG

但是正确的语法如下。 换句话说,日期常数应该用单引号引起来。

... WHERE `id` = 123 AND `date` = '2018-06-12' -- RIGHT

您第二次尝试使用反勾号也是错误的。 反引号用于分隔标识符,例如列名或表名。 这种语法意味着您正在将id与名称为123的列进行比较,并且我假设您没有这样的列。 该日期前后的2018-06-12也一样,它被解释为名为2018-06-12的列,这不太可能。 MySQL不会将反引号与单引号相同。

... WHERE `id` = `123` AND `date` = `2018-06-12` -- WRONG

但是,有一个更简单的解决方案。 如果使用查询参数,则不必担心引号:

$sql = "SELECT * FROM `{$this->table}` WHERE `id` = ? AND `date` = ?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute([$id, $date]);

您已经在使用prepare() ,因此应该最大程度地利用它,并使用查询参数( ?占位符),而不是将变量插值到SQL查询字符串中。

使用参数时,不需要在字符串或日期前后加上引号。 实际上,您不能使用引号分隔? 参数占位符。

请注意,我还展示了PHP语法,该语法可将变量直接放入字符串中而不破坏字符串并使用. 用于串联。 如果您的PHP字符串用双引号分隔,则可以执行此操作。 阅读http://php.net/manual/en/language.types.string.php#language.types.string.parsing了解详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM