这很奇怪,我将一些代码从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时,我将不得不用一半的查询来解决问题_
答案 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
时,保留字会中断