sql查询语法

afdcj2ne  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(298)

我正在尝试编写一个sql查询来获取id和日期。我在语法正确方面遇到了一些问题:

$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 . '` ');
plupiseo

plupiseo1#

正如其他人在上面评论的那样,你的约会没有引用。您的语法将创建以下sql:

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

但正确的语法如下。换句话说,日期常量应该用单引号分隔。

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

你第二次尝试背虱也是错误的。后面的记号用于分隔标识符,如列名或表名。这个语法意味着你在比较 id 到名称为的列 123 ,我想你没有这样的专栏。对于日期周围的倒勾也是一样的,它被解释为一个名为 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 详情。

相关问题