mysql_query($sql)到底返回boolen值还是resource id???

nullbertauhala 2012-03-12 06:54:39

<?php

$sql = "SELECT * FROM UserInfo WHERE id=222";
$sql2 = "SELECT TOP 1 * FROM UserInfo WHERE id=222";


mysql_connect("localhost", "root", "");

mysql_select_db("MYDB");

$result = mysql_query($sql);
if (!$result){
echo( "the user not exist" .mysql_query($sql));
}else{
echo( "ok ,the user exist".mysql_query($sql) );
}
?>

如果用sql,输出为ok ,the user existResource id #4
如果用sql2, 输出为the user not exist

声明一下,id = 222 的数据在数据库中是不存在的,为什么会有这样的结果?
用sql查询,返回的是资源ID,用sql2查询,返回的是布尔值,为什么?

...全文
425 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nullbertauhala 2012-03-13
  • 打赏
  • 举报
回复
谢谢 啊 !!!
coder 2012-03-13
  • 打赏
  • 举报
回复

mysql_query — 发送一条 MySQL 查询

说明

resource mysql_query ( string $query [, resource $link_identifier ] )
mysql_query() 向与指定的连接标识符关联的服务器中的当前活动数据库发送一条查询。如果没有指定 link_identifier,则使用上一个打开的连接。如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。查询结果会被缓存。

Note:

查询字符串不应以分号结束。

mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。 很有可能一条查询执行成功了但并未影响到或并未返回任何行。

以下查询语法上有错,因此 mysql_query() 失败并返回 FALSE:

Example #1 mysql_query() 例子
<php
$result = mysql_query("SELECT * WHERE 1=1")
or die("Invalid query: " . mysql_error());
?>
以下查询当 my_col 并不是表 my_tbl 中的列时语义上有错,因此 mysql_query() 失败并返回 FALSE:

Example #2 mysql_query()
<?php
$result = mysql_query("SELECT my_col FROM my_tbl")
or die("Invalid query: " . mysql_error());
?>
如果没有权限访问查询语句中引用的表时,mysql_query() 也会返回 FALSE。

假定查询成功,可以调用 mysql_num_rows() 来查看对应于 SELECT 语句返回了多少行,或者调用 mysql_affected_rows() 来查看对应于 DELETE,INSERT,REPLACE 或 UPDATE 语句影响到了多少行。

仅对 SELECT,SHOW,DESCRIBE 或 EXPLAIN 语句 mysql_query() 才会返回一个新的结果标识符,可以将其传递给 mysql_fetch_array() 和其它处理结果表的函数。处理完结果集后可以通过调用 mysql_free_result() 来释放与之关联的资源,尽管脚本执行完毕后会自动释放内存。

参见 mysql_num_rows(),mysql_affected_rows(),mysql_unbuffered_query(),mysql_free_result(),mysql_fetch_array(),mysql_fetch_row(),mysql_fetch_assoc(),mysql_result(),mysql_select_db() 和 mysql_connect()。
一起混吧 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jordan102 的回复:]

$result=mysql_query($sql);

if (!$mysql_num_rows($result)){
echo( "the user not exist" );
}else{
echo( "ok ,login sucsuss);
}
[/Quote]有错。更正:
$result=mysql_query($sql);

if (!mysql_num_rows($result)){
echo( "the user not exist" );
}else{
echo( "ok ,login sucsuss);
}
  • 打赏
  • 举报
回复

/*
mysql_affected_rows -- 取得前一次 MySQL 操作所影响的记录行数
说明
int mysql_affected_rows ( [resource link_identifier] )
*/
if(mysql_affected_rows() > 0){ //如果执行成功
……
}else{……}
一起混吧 2012-03-13
  • 打赏
  • 举报
回复
$result=mysql_query($sql);

if (!$mysql_num_rows($result)){
echo( "the user not exist" );
}else{
echo( "ok ,login sucsuss);
}
nullbertauhala 2012-03-13
  • 打赏
  • 举报
回复
我是要做个登陆处理页面:那么我要这么写吗:

<?php

$sql = "SELECT * FROM UserInfo WHERE username='user1' and passwd='passwd1'";

mysql_connect("localhost", "root", "");

mysql_select_db("MYDB");

mysql_query($sql);

if (!$mysql_num_rows){
echo( "the user not exist" );
}else{
echo( "ok ,login sucsuss);
}
?>

xuzuning 2012-03-13
  • 打赏
  • 举报
回复
查询成功就返回资源id,这与结果有多少没有关系
获取查询结果的行数用 mysql_num_rows
nullbertauhala 2012-03-13
  • 打赏
  • 举报
回复
但是数据库没有ID=222的数据,为什么仍然返回一个资源ID,我用$row=mysql_fetch_data($result),然后输出$row[]中的内容,没有显示
freedom_gooboy 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 libo_sina 的回复:]
返回的有结果集就是一个资源性,否则就是false
[/Quote]
+
libo_sina 2012-03-12
  • 打赏
  • 举报
回复
返回的有结果集就是一个资源性,否则就是false
xuzuning 2012-03-12
  • 打赏
  • 举报
回复
mysql 没有 top 子句,就如同 sybase 系列没有 limit 一样

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧