【问题标题】:PHP MYSQL While LOOP not displaying all rowsPHP MYSQL While LOOP 不显示所有行
【发布时间】:2014-02-19 23:31:18
【问题描述】:

我正在尝试从我的数据库中选择所有行,其中“street”类似于数组 ($streets) 中的内容。

这就是我所拥有的......

    #TEXT AREA INPUT  = $streets
    $sql = "SELECT * FROM `data` WHERE `street` LIKE '%".implode("%' OR `street` LIKE     '%",$streets)."%'";
    echo $sql;
    $result = mysqli_query($con,$sql)  or die(mysql_error());
    $totalitems1 =  mysqli_num_rows($result);
    echo $totalitems1 . "<br>";
    while($row = mysqli_fetch_array($result))
    {
    echo $row['street']. "<br>";

    }

变量 $streets 是从文本区域输入中分解出来的,每个值都在一个新行上。

当我使用 PHP 进行处理时,仅返回与最后一个“或”类似的行 ..(文本区域中的最后一行)。但是当我将生成的 SQL 复制并粘贴到 PHPMYADMIN 中时,它会按预期返回所有数据。

我在这里缺少什么?谢谢。

【问题讨论】:

  • 试试mysqli_fetch_assoc()而不是mysqli_fetch_array()
  • 旁注:您还将mysqli_querymysql_* 函数mysql_error 混合使用,这将导致不显示实际的错误消息。

标签: php mysql loops while-loop


【解决方案1】:

我的猜测是您没有从每个 $street 条目的末尾删除换行符,因此只有最后一个条目看起来有效,因为它可能没有尾随换行符。毫无疑问,您的查询可能看起来像...

SELECT * FROM `data` WHERE `street` LIKE '%foo
%' OR `street` LIKE '%bar
%' OR `street` LIKE '%baz%'

快速解决方法是使用...

implode("%' OR `street` LIKE '%", array_map(function($s) use ($con) {
    return $con->escape_string(trim($s));
}, $streets))

理想情况下,您应该使用带有参数绑定的预处理语句。

【讨论】:

  • 超级!非常感谢你。我猜当你一整天都在走的时候,你会看一些简单的事情。再次感谢菲尔。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2011-10-19
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
相关资源
最近更新 更多