我正在尝试从我的数据库中选择所有行,其中'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>";
}
varible $ streets从文本区域输入中展开,每个值都在新行上。
当我使用PHP处理它时,只返回与最后一个'OR'相似的行。(文本区域中的最后一行)。但是,当我将生成的SQL复制并粘贴到PHPMYADMIN中时,它会按预期返回所有数据。
我在这里缺少什么?感谢。
答案 0 :(得分:0)
我的猜测是你没有从每个$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))
理想情况下,您应该使用带参数绑定的预准备语句。