'之间的区别单引号和mysqli_query的`backtick

时间:2014-10-18 09:53:15

标签: php mysqli

这很奇怪,我将一些代码从mysql改为mysqli函数导致php 5.5+,在这两个基本的例子中,mysql_query没有'单引号也没有'反击并且工作正常。

$sql = "SELECT * FROM `".$table."`"; // requires: ` ` or fails
$result = mysqli_query($con,$sql);

$sql = "SHOW TABLES LIKE '".$table."'"; // requires: ' ' or fails
$result = mysqli_query($con,$sql);

有人可以解释原因吗?

编辑:我想我的问题的实质是:两个函数都运行正常而没有mysql_query的任何引号,并且都没有mysqli_query而没有引用某些引号。这意味着当我从mysql_更改为mysqli时,我将不得不用一半的查询来解决问题_

1 个答案:

答案 0 :(得分:3)

在你的第一个选择语句中,你试图按照它的名字选择一个表,因此它将接受该名称,或者不使用它们,但现在使用单引号或双引号。这些应该有效:

 $sql = "SELECT * FROM `table_name`";
 $sql = "SELECT * FROM table_name";

在第二种情况下,您需要传入一个字符串以便通过like语句进行比较,因此您需要使用单个'或双"引号将其包围:

$sql = "SHOW TABLES LIKE 'string'";
$sql = "SHOW TABLES LIKE \"string\"";

修改

在SO上查看以前的答案: Using backticks around field names

编辑2:

由于我们(我和评论中)建议反引号在某种程度上是可选的,请记住,作为最佳实践,只要你可以使用它们,因为虽然它允许你在没有它们的情况下传递大多数查询,但是使用{{1包含mysql reserved words

时,保留字会中断