我正在尝试编写一个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 . '` ');
1条答案
按热度按时间plupiseo1#
正如其他人在上面评论的那样,你的约会没有引用。您的语法将创建以下sql:
但正确的语法如下。换句话说,日期常量应该用单引号分隔。
你第二次尝试背虱也是错误的。后面的记号用于分隔标识符,如列名或表名。这个语法意味着你在比较
id
到名称为的列123
,我想你没有这样的专栏。对于日期周围的倒勾也是一样的,它被解释为一个名为2018-06-12
这不太可能。mysql不把反引号当作单引号。然而,有一个更简单的解决方案。如果使用查询参数,则不必担心引号:
你已经在用了
prepare()
,因此您应该充分利用它的优势,并使用查询参数(?
占位符),而不是在sql查询字符串中插入变量。使用参数时,不需要在字符串或日期周围加引号。事实上,您不能使用引号来分隔
?
参数占位符。注意,我还展示了php语法,用于将变量直接放入字符串中,而不中断字符串并使用
.
用于连接。如果php字符串用双引号分隔,则可以这样做。阅读http://php.net/manual/en/language.types.string.php#language.types.string.parsing 详情。