【发布时间】:2015-01-13 05:59:02
【问题描述】:
$search = htmlspecialchars($_GET["s"]);
if(isset($_GET['s'])) {
// id index exists
$wordarray = explode(" ",$search);
$stringsearch = implode('%',$wordarray);
echo $stringsearch;
echo ",";
$result = mysqli_fetch_array($conn->query("SELECT ID FROM table WHERE title LIKE '%$stringsearch%';"));
if (!empty($result)) {
echo sizeof($result);
echo ",";
数据库有 3 行标题为 test,pest,nest,对应的 id 为 1,2,3。当我请求 domain.com/?s=est
它呼应了这样的事情 est,2,
现在,当我检查 $result[0] 和 $result[1] 时,$result[0] 回显了 1 和 $result[1] 没有回显任何内容。当我使用 foreach 函数时,它只取 $result[0]
的值并且 $result 应该是所有三个索引的数组。
我找不到任何错误, 当我在 sql 控制台中键入相同的命令时,它可以工作,有人帮助我,在此先感谢。
【问题讨论】:
-
您的代码容易受到 sql 注入的影响——而 htmlspecialchars 在这里毫无用处 :)
-
现在你能解释一下如何删除sql漏洞吗? @马丁
-
我推荐使用prepared statements,你也可以使用mysqli_real_escape_string
-
已经这样做了谢谢 ;)