我认为错误是SQL查询还是numrows
功能?
还有一些事情可能是错的,因为我做了很多改变,现在我完全糊涂了。
请问有人在这段代码中告诉mysqli_num_rows
有什么问题吗?
提前谢谢。
<?php
$i=0;
$key=$_GET['abc'];
$ex=explode(" ", $key);
$query="SELECT * FROM search";
/*foreach ($ex as $val)
{
$i++;
if($i == 1)
$query .="keywords like '%$val%' ";
else
$query .="or keywords like '%$val%' ";
}*/
$con=mysqli_connect("localhost","xxxxxxx","xxxxxxx","search");
if (!$con)
die("Connection failed: " . mysqli_connect_error());
else
echo "Connected successfully";
mysqli_select_db($con,"search");
$queryy=mysqli_real_query($con,$query);
$nr =@mysqli_query($con, $queryy);
$row=mysqli_num_rows($nr);
if($row>0)
{
while($r=mysqli_fetch_assoc($queryy))
{
$id=$r['id'];
$title=$r['title'];
$description=$r['description'];
$keywords=$r['keywords'];
$link=$r['link'];
echo "<h2> <a href='$link'>$title</a></h2> $description <br /><br />";
}
}
else
echo "no results found for \"<b>$key</b>\" ";
?>
答案 0 :(得分:0)
$queryy=mysqli_real_query($con,$query); $nr =@mysqli_query($con, $queryy); $row=mysqli_num_rows($nr);
mysqli_real_query()
接受查询字符串并返回boolean
以指示其是否成功。然后可以通过mysqli_store_result()
或mysqli_use_result()
。
mysqli_query()
接受一个查询字符串,并返回一个mysqli_result
对象(在本例中为SELECT查询)或boolean
表示成功或失败。然后可以将结果对象传递给其他函数。
在您的代码中,您将第一个函数中的布尔指示符代替查询字符串传递给第二个函数。这显然会失败,你不应该尝试执行两个查询。你应该删除第一个。
您还应该删除@
错误抑制并执行正确的错误检查。例如:
$result = mysqli_query ($con, $query);
if ($result)
{
$rows = mysqli_num_rows ($result);
if ($rows > 0)
{
while ($r = mysqli_fetch_assoc ($result))
{
// Do stuff
}
}
else
{
echo "no results...";
}
}
else
{
// Query failed.
}
你会注意到我给变量更有意义的名字。另请注意,mysqli_fetch_assoc()
函数采用结果参数,而不是查询字符串。
请注意,对于比简单SELECT *
查询更复杂的事情,您可能应该使用prepared statements代替。
您还应该使用htmlspecialchars()
来转义HTML输出,以避免XSS攻击,并且通常会使输出失败令人尴尬。 E.g:
$link_h = htmlspecialchars ($link);
$title_h = htmlspecialchars ($title);
echo "<h2> <a href='$link_h'>$title_h</a></h2>...";
等等。