【问题标题】:cannot retrieve indexes correctly mysqli无法正确检索索引 mysqli
【发布时间】: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
  • 已经这样做了谢谢 ;)

标签: php mysql mysqli fetch


【解决方案1】:

问题是,如果您期望多行,请不要这样做:

$result = mysqli_fetch_array($conn->query("SELECT ID FROM table WHERE title LIKE '%$stringsearch%';")); 

这只是获取第一行,你需要循环它以推进下一个指针并获取下一个后续行集:

$result = $conn->query("SELECT ID FROM table WHERE title LIKE '%$stringsearch%' ");

while($row = $result->fetch_array()) {
    echo $row[0] . '<br/>';
    // or $row['ID'];
}

旁注:考虑使用准备好的语句,因为 mysqli 已经支持这一点。

【讨论】:

  • Thanx @Ghost,如果不是你,我会浪费时间 :) ;)
  • 或 mysqli_real_escape_string 现在 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 2016-02-20
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
相关资源
最近更新 更多