2011-12-01 53 views
2

某处我做错了事,我的查询结果为true而不是false。在我的表中,id 246确实存在,但在表中lev为零。我做错了什么,这个查询应该导致错误。它回声成功,但不更新表格。在php中的mysql查询计算结果为true

if (mysql_query("UPDATE ex_usrs SET lev = '1' WHERE id = '246' AND lev = '3'")) { 
echo "success"; 
} else { 
echo "fail"; 
} 

回答

1

docs

对于SELECT,SHOW,描述,解释等语句返回 结果集,请求mysql_query()成功返回资源,或在 错误时返回FALSE。

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等, mysql_query()在成功时返回TRUE或在错误时返回FALSE。

返回的结果资源应该传递给mysql_fetch_array(), 和其他函数来处理结果表,来访问 返回的数据。

使用mysql_num_rows()来找出有多少行被返回的 SELECT语句或mysql_affected_rows()函数来找出有多少行 受到影响由DELETE,INSERT,REPLACE或UPDATE语句。

请勿使用mysql_query来检查您是否确实更新了某些行。改为使用mysql_affected_rows()

4

你没有做错什么:因为它是正确执行mysql_query语句返回true!
这并不意味着数据库中的任何行都会更新。

+0

好的谢谢我现在明白了。当我更新记录时,我的印象是真实的。 – Wilest

5

它返回true,因为查询是成功的,它会影响0行。如果您要检查,如果事情实际上得到更新,使用

mysql_affected_rows 

link to documentation

0

从您的描述中,它听起来像查询正在运行,但没有做任何更改。正如其他人所指出的那样,这是预期的行为。

您还表示,ID为246的记录的lev为零。这说明更新失败的原因。你只更新与编号246的记录,如果列弗已被设置为3,根据您的情况,下面的任一可能会更好地为您:

if (mysql_query("UPDATE ex_usrs SET lev = '1' WHERE id = '246' AND lev = '0'")) { 
    echo "success"; 
} else { 
    echo "fail"; 
} 

或忽略当前状态列弗完全:

if (mysql_query("UPDATE ex_usrs SET lev = '1' WHERE id = '246'")) { 
    echo "success"; 
} else { 
    echo "fail"; 
}