【发布时间】:2012-05-13 12:43:43
【问题描述】:
即使有多个匹配条目(完全或部分匹配),我在下面的查询也只会显示一个结果。如何修复它以便返回所有匹配的条目:
//$allowed is a variable from database.
$sql = "SELECT `users`.`full_name`, `taglines`.`name`, `users`.`user_id` FROM
`users` LEFT JOIN `taglines` ON `users`.`user_id` = `taglines`.`person_id`
WHERE ( `users`.`user_settings` = '$allowed' ) and ( `users`.`full_name`
LIKE '%$q%' ) LIMIT $startrow, 15";
$result = mysql_query($sql);
$query = mysql_query($sql) or die ("Error: ".mysql_error());
$num_rows1 = mysql_num_rows($result);
if ($result == "")
{
echo "";
}
echo "";
$rows = mysql_num_rows($result);
if($rows == 0)
{
}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{
$person = htmlspecialchars($row['full_name']);
}
}
}
print $person;
【问题讨论】:
-
可能是因为limit子句中的$startrow
-
当我看到 PHP 代码没有使用 PHP Prepared Statements 来防止 SQL Injection 漏洞时,我很担心。我希望您正在清理尚未粘贴到此处的代码中的变量。如果没有,请考虑重写代码以使用 PDO 准备语句,而不是尝试清理您的变量。
-
@sarnold 是的,别担心。他们正在被消毒。根据 stackoverflow 专家的说法,无论我使用什么、准备什么或这种方式,风险都是一样的。
-
@sarnold 顺便说一句,如果我单独清理与使用 PDO,这不是一回事吗?
-
@Ariel:大致相同,是的,但是使用 PDO,您不能搞砸它而忘记或双重清理变量。
标签: php sql search conditional-statements sql-like