【发布时间】:2012-06-06 04:14:15
【问题描述】:
我整天都在寻找我的代码中的一个错误。这是它的长短:
我有一个通过查询字符串传递的变量,我想在我的 MySQLi 查询中使用该变量。像这样:
$variable;
$info = dbConnect('query');
$eInfo = "SELECT *
FROM tablename
WHERE fieldname = '$variable%'";
$eiData = $info->query($eInfo) or die(mysqli_error());
$eInfo = $eiData->fetch_assoc();
重点是变量名后面的%。我不是 PHP 专家,但我记得不久前就学会了这个技巧,它对我所有的数据库驱动网站都有效,除了我正在开发的新网站。
上面的查询没有从表中返回任何数据。
但是……
如果我省略 % 如下:
$variable;
$info = dbConnect('query');
$eInfo = "SELECT *
FROM tablename
WHERE fieldname = '$variable'";
$eiData = $info->query($eInfo) or die(mysqli_error());
$eInfo = $eiData->fetch_assoc();
查询执行,我得到了我的数据。
为什么在我想使用语法“$variable%”编写查询后,这将不再起作用?只需删除 % ('$variable') 就可以正常工作,这让我完全困惑。
对于它的价值,我运行了一个专用服务器并且最近安装了 suPHP,如果这有任何帮助在这里有意义的远程机会(PHP 5.2.17 是我当前的版本)。
同样,我不是 PHP 专家,但在检查了旧网站的代码后,我使用 MySQLi 查询完成了,在将变量附加到查询中时,% 始终存在。
我完全死在水里了。您能提供的任何帮助都会非常感激,以至于无法解释。
【问题讨论】:
-
您是否正在考虑条件为
field LIKE 'value%'而不是field = 'value%'的文本字段?%是带有LIKE的通配符,但它是带有=的字面值。 -
另外,如果你像这样直接在查询中抛出该变量,你很容易受到 SQL 注入的攻击。 Bind parameters 改为使用参数化查询。 (参见链接中的示例。)
-
@Wiseguy - 你如何在不直接传递变量的情况下进行数据库查询?
-
奇数。简单地在一切结束时抛出
%对我来说没有意义。我只是猜测他们都使用LIKE而不是=,因为否则我根本看不到它会如何工作。长话短说,据我所知,%不应该在那里。如果$variable是“wiseguy”,则查询不应该找到结果,除非存储的值是字面上的“wiseguy%”,最后是“%”,我怀疑是这种情况。 -
好的,那么根据我的理解,我不知道为什么所有其他查询都有效。 :-p
标签: php mysql database syntax mysqli