2010-07-24 72 views
0

我使用此代码来计算行并尝试执行IF num rows equals to ZERO do INSERT if not UPDATE,但它不起作用。如果mysql_num_rows等于零不起作用

当我使用==操作符时,什么都不会发生。如果我使用>=运算符脚本插入值,但在每个刷新上运行插入查询,并且值在MySQL表中复制。

下面是代码:

$isexist = mysql_query("select count(*) from wcddl_filehosts where downloadid = '".$download[id]."'"); 

if (mysql_num_rows($isexist) == 0) { 
mysql_query("insert into wcddl_filehosts (downloadid, rs) values ('".$download[id]."','$totalRS')"); 
} else { 
mysql_query("update wcddl_filehosts set rs = '$totalRS' where downloadid = '".$download[id]."'"); 
} 

这有什么错呢?

+0

重新标记,因为这已经无关的preg_match。 – cypher 2010-07-24 15:26:07

回答

8

Count将返回一个值,并且您不能计数,然后调用mysql_num_rows。它是另一个。

你可以做

$isExist = mysql_query("Select count(id) from ..."); 
$r = mysql_fetch_array($isExist); 
if($r['COUNT(id)'] > 0){ 
//item exists 
}else{ 
//item doesnt exist 
} 

如果或者你可以做查询:

$isexist = mysql_query("select * from wcddl_filehosts where downloadid = '".$download[id]."'"); 
if(mysql_num_rows($isExists)>0){ 
//we have items 
}else{ 
//we dont have items 
} 
+0

非常感谢您的回答。但我想问哪个方法更快? – 2010-07-24 13:32:32

+1

这是一个MySQL返回计数本身与php执行计数的问题。我会想象MySQL会更好,然后PHP是这样,但这只是一个预感,没有什么比这更少。 :-) 虽然如果你在谈论数百万条记录,那么MySQL会更快,我几乎是积极的。 – Chris 2010-07-24 13:34:54

+0

使用MySQL进行计数的原因是更好的选择,因为在计算总数之前,MySQL不必构建和发送整个结果集(在数百万条记录的情况下是大量数据)。从MySQL使用SELECT时,一般的经验法则是绝不会返回不需要的结果,因为这浪费了I/O资源。 – AvatarKava 2010-07-24 15:32:05