mysql_query的坑

今天非常坑,就用写博客来发泄吧。。。


账号
密码
"; $sql = "select username,password from user where password = '$password'"; //$sql = "select username,password from user where 1=2"; echo $sql."
"; $select_sql_result = mysql_query($sql); var_dump($select_sql_result); echo "
"; if(!$select_sql_result) echo "wrong"."
"; else echo "success!!!"."
"; while($res=mysql_fetch_assoc($select_sql_result)){ foreach($res as $key=>$value){ echo $key.":".$value.'
'; } } ?>

先分析一下mysql_query

mysql_query() 函数执行一条 MySQL 查询。

语法

mysql_query(query,connection)

参数 描述
query 必需。规定要发送的 SQL 查询。注释:查询字符串不应以分号结束。
connection 可选。规定 SQL 连接标识符。如果未规定,则使用上一个打开的连接。

说明

如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。

返回值

mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。

对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。

非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。

运行代码之后发现if(!$select_sql_result)总是对的,无论你输入什么,而且mysql_query()返回的总是资源类型,除非sql语句不合语法,它才会返回FLASE,看到上面的绿色部分,即使mysql_query()执行成功,也可能不会返回结果,也就是查询结构为空,如下图,但是它不是bool FALSE 这种情况它只会返回资源类型

想要对查询结果进行判断是否为空,可以用mysql_num_rows()和mysql_affected_rows()

1.)mysql_num_rows() 函数返回结果集中行的数目。

语法

mysql_num_rows(data)
参数 描述
data 必需。结果集。该结果集从 mysql_query() 的调用中得到。

说明

mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT 语句有效。要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows()。

2.)

mysql_affected_rows() 函数返回前一次 MySQL 操作所影响的记录行数。

语法

mysql_affected_rows(link_identifier)
参数 描述
link_identifier 必需。MySQL 的连接标识符。如果没有指定,默认使用最后被 mysql_connect() 打开的连接。如果没有找到该连接,函数会尝试调用 mysql_connect() 建立连接并使用它。如果发生意外,没有找到连接或无法建立连接,系统发出 E_WARNING 级别的警告信息。

说明

取得最近一次与 link_identifier 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数。

所以代码可以改为
 


账号
密码
"; $sql = "select username,password from user where password = '$password'"; // $sql = "select username,password from user where 1=2"; echo $sql."
"; $select_sql_result = mysql_query($sql); var_dump($select_sql_result); echo "
"; if(mysql_num_rows($select_sql_result)===0) echo "wrong"; /*if(!$select_sql_result) echo "wrong"."
";*/ else echo "success!!!"."
"; while($res=mysql_fetch_assoc($select_sql_result)){ foreach($res as $key=>$value){ echo $key.":".$value.'
'; } } ?>

真是心累。。。。。

你可能感兴趣的:(mysql学习)