2011-10-23 83 views
3

我在mysqli中编写了一个php表格搜索表,它工作正常,但是如果没有找到结果,我想向用户显示正确的消息。检查是否没有在MySQL数据库中找到结果

这里是我当前的代码:

$search_string=$_GET["design"]; 

$connect= mysqli_connect("mysql.myhost.com","abc","123456","mydb_db"); 
$query="select * from product where product_design like '%$search_string%'"; 
$rows= @mysqli_query($connect,$query) or die("Error: ".mysqli_error($connect)); 
if ($rows!=null)//I put this if to check if there is any result or not but its not working 
{ 

while(($record=mysqli_fetch_row($rows))!=null) 
{ 
    . 
      .//i have working code for showing the result here 
      . 
} 
mysqli_close($connect); 
} 
else{ 
echo"no result found"; 
} 

能否请你帮我什么是错的,甚至当我搜索一些东西,是不是在DB仍然没有显示程序“没有结果发现”存在

谢谢

+1

尝试将'$ rows!= null'更改为'$ rows> 0' – lemonpole

+1

希望没有人运行设计=''; DROP TABLE产品的GET请求;' –

+0

要扩展@ Phil的观点,您的代码是非常容易受到[SQL Injection](http://php.net/manual/en/security.database.sql-injection.php)的攻击。这意味着任何使用您的网站的人都可以对数据库做任何事情。考虑使用参数化查询(谷歌它), – Basic

回答

3

你需要的是mysqli_num_rows特别是mysqli_result::num_rows位。这会为mysqli结果集添加一个num_rows属性。这意味着你可以做

$rowCount = $rows->num_rows

还有一个非面向对象等效...

$rowCount = mysqli_num_rows($rows);

(所不同的是纯粹的编码风格之一)

用途之一这些来确定返回多少条记录并输出适当的消息。

+0

谢谢,但事情是当我把回声检查行数,如果我离开文本框空白num_rows是12因为我有12个记录在表中。但如果我把其中一个现有的行作为搜索,它将返回1,因为只有一行匹配。它是starnge – David83

+0

它听起来像是完美的工作......行数只是数据库发回的行数,从来没有存储在数据库中的行数(除非你获得所有的行)。 – Basic

+1

如果您想知道表中的总行数,请对“SELECT COUNT(*)AS TotalRecordCount FROM product”执行第二个查询,该查询将返回一个字段(称为'TotalRecordCount'),其中一行包含数字表中的行。 – Basic

0

下面一行没有意义,这可能是问题。

while(($record=mysqli_fetch_row($rows))!=null) 

但是,如果$ row为空,但不会返回'null',但不会被设置。像这样做:

if ($rows) { echo 'works';} else { echo 'no rows'; } 
+0

感谢您的帮助,但我已经解决了这个问题,使用num-rows。:) – David83

相关问题