-
2020-09-28 19:56:13
Mysql的mysql_store_result/mysql_use_result,mysql_field_count/mysql_num_fields/mysql_num_rows函数区别
1 先参考以下文章,或者先看下面再回来理解
mysql_use_result()的用法实例
mysql_store_result()返回NULL的情况
mysql_num_fields与mysql_field_count的区别2 总结
/* 1. mysql_field_count,mysql_num_fields可认为一样,都返回字段值;只不过后者必须要有mysql_store_result/mysql_use_result的返回值MYSQL_RES支撑执行 mysql_num_rows:返回真实的行数.同样需要MYSQL_RES支撑执行. 三者区别: 1)执行insert,update,detele时,mysql_store_result/mysql_use_result无返回值(不会返回字段),.'.mysql_field_count=0,mysql_num_fields和 mysql_num_rows更不用说了,无参数(NULL)根本无法执行; 2)执行select,show等语句时:由于mysql_store_result/mysql_use_result必会返回字段值, .'.mysql_field_count必然会等于mysql_num_fields; 而mysql_num_rows等于真实的值,范围为[0,n],可以是0 总结:以上的判断均是依靠条件:1)执行的语句;2)mysql_store_result/mysql_use_result返回值判断 2. mysql_store_result()返回NULL的情况: 1)有一个malloc()失败(例如,如果结果集合太大)。 2)数据不能被读取(发生在连接上的一个错误)。 3)查询没有返回数据(例如,它是一个INSERT、UPDATE或DELETE). 解决:可用mysql_field_count() == 0,为0则证明正常;否则出错打印mysql_error(&mysql).(只针对NULL的情况) mysql_store_result()不为NULL的情况: 1)执行select,行数为空,列数必不为空;即执行select后,mysql_store_result必不为空.show同理 2)正常执行sql语句的返回结果 */
更多相关内容 -
mysql_num_fields与mysql_field_count的区别 | 学步园
2021-01-27 17:22:46mysql_num_fields和mysql_field_count都是获取结果中列的个数,但是这两个函数在使用的时候是存在区别的。先看一段代码(上篇文章提供的数据库):#include #include #include #include intmain(){charout[100];MYSQL ...mysql_num_fields和mysql_field_count都是获取结果中列的个数,但是这两个函数在使用的时候是存在区别的。
先看一段代码(上篇文章提供的数据库):
#include
#include
#include
#include
intmain()
{
charout[100];
MYSQL mysql;
MYSQL_RES* res;
intnum_fields;
intcount_fields;
intnum_rows;
mysql_init(&mysql);
mysql_real_connect(&mysql,NULL,"root","123","ta",0,NULL,0);
fprintf(stdout,"--insert------------------------/n");
mysql_real_query(&mysql,"INSERT INTO t1 VALUES(6,'n6')",29);
count_fields = mysql_field_count(&mysql);
sprintf(out,"insert----count_fields is %d/n",count_fields);
fprintf(stdout,out);
res = mysql_store_result(&mysql);
if(res == NULL)
{
fprintf(stdout,"insert---store return null/n");
}
else
{
num_fields = mysql_num_fields(res);
sprintf(out,"insert---num_fields is %d/n",num_fields);
fprintf(stdout,out);
}
fprintf(stdout,"---select-----------/n");
mysql_real_query(&mysql,"SELECT * FROM t1",16);
count_fields = mysql_field_count(&mysql);
sprintf(out,"select---count_fields is %d/n",count_fields);
fprintf(stdout,out);
res = mysql_store_result(&mysql);
if(res == NULL)
{
fprintf(stdout,"select---store return null/n");
}
else
{
num_fields = mysql_num_fields(res);
sprintf(out,"select---num_fields is %d/n",num_fields);
fprintf(stdout,out);
num_rows = mysql_num_rows(res);
sprintf(out,"select---num_rows is %d/n",num_rows);
fprintf(stdout,out);
}
fprintf(stdout,"---select 0------/n");
mysql_real_query(&mysql,"SELECT * FROM t1 where id = 10",30);
count_fields = mysql_field_count(&mysql);
sprintf(out,"select 0---count_fields is %d/n",count_fields);
fprintf(stdout,out);
res = mysql_store_result(&mysql);
if(res == NULL)
{
fprintf(stdout,"select 0---store return null/n");
}
else
{
num_fields = mysql_num_fields(res);
sprintf(out,"select 0---num_fields is %d/n",num_fields);
fprintf(stdout,out);
num_rows = mysql_num_rows(res);
sprintf(out,"select 0---num_rows is %d/n",num_rows);
fprintf(stdout,out);
}
mysql_free_result(res);
mysql_close(&mysql);
exit(0);
}
#include
#include
#include
#include
int main()
{
char out[100];
MYSQL mysql;
MYSQL_RES* res;
int num_fields;
int count_fields;
int num_rows;
mysql_init(&mysql);
mysql_real_connect(&mysql,NULL,"root","123","ta",0,NULL,0);
fprintf(stdout,"--insert------------------------/n");
mysql_real_query(&mysql,"INSERT INTO t1 VALUES(6,'n6')",29);
count_fields = mysql_field_count(&mysql);
sprintf(out,"insert----count_fields is %d/n",count_fields);
fprintf(stdout,out);
res = mysql_store_result(&mysql);
if(res == NULL)
{
fprintf(stdout,"insert---store return null/n");
}
else
{
num_fields = mysql_num_fields(res);
sprintf(out,"insert---num_fields is %d/n",num_fields);
fprintf(stdout,out);
}
fprintf(stdout,"---select-----------/n");
mysql_real_query(&mysql,"SELECT * FROM t1",16);
count_fields = mysql_field_count(&mysql);
sprintf(out,"select---count_fields is %d/n",count_fields);
fprintf(stdout,out);
res = mysql_store_result(&mysql);
if(res == NULL)
{
fprintf(stdout,"select---store return null/n");
}
else
{
num_fields = mysql_num_fields(res);
sprintf(out,"select---num_fields is %d/n",num_fields);
fprintf(stdout,out);
num_rows = mysql_num_rows(res);
sprintf(out,"select---num_rows is %d/n",num_rows);
fprintf(stdout,out);
}
fprintf(stdout,"---select 0------/n");
mysql_real_query(&mysql,"SELECT * FROM t1 where id = 10",30);
count_fields = mysql_field_count(&mysql);
sprintf(out,"select 0---count_fields is %d/n",count_fields);
fprintf(stdout,out);
res = mysql_store_result(&mysql);
if(res == NULL)
{
fprintf(stdout,"select 0---store return null/n");
}
else
{
num_fields = mysql_num_fields(res);
sprintf(out,"select 0---num_fields is %d/n",num_fields);
fprintf(stdout,out);
num_rows = mysql_num_rows(res);
sprintf(out,"select 0---num_rows is %d/n",num_rows);
fprintf(stdout,out);
}
mysql_free_result(res);
mysql_close(&mysql);
exit(0);
}
执行结果是:
--insert------------------------
insert----count_fields is 0
insert---store return null
---select-----------
select---count_fields is 2
select---num_fields is 2
select---num_rows is 7
---select 0------
select 0---count_fields is 2
select 0---num_fields is 2
select 0---num_rows is 0
显然,当执行insert语句的时候,是没有结果返回的,因此列的个数为0,且mysql_store_result返回NULL。因此可以通过mysql_field_count()是否返回0来判断是否有结果返回,而不需要执行mysql_store_result来判断是否返回了NULL。我想,mysql_field_count()的效率肯定要比mysql_store_result()高。
在这种情况下,由于没有返回结果,因此mysql_store_result()返回NULL,也就是得不到res指针,于是mysql_num_fields()函数就无法执行,缺少必要的参数。
当执行第一条select语句的时候,返回了结果,因此mysql_field_count()和mysql_num_fields()都返回了正确的列的个数2,mysql_num_rows()返回了记录的条数7.
当执行第二条select语句,由于表中没有 id = 0 的记录,因此mysql_num_rows返回了0表示记录数为0,但是,我们发现mysql_store_result()并没有返回NULL,mysql_num_fields()和mysql_field_count()还是返回了2.
因此我们可以得出这样的结论:
执行结果有三种情况,第一是执行insert、update和delete这样的语句的时候,是不会有任何内容返回,因此mysql_store_result()会返回一个NULL。第二,执行select或show这样的语句时,一定会有内容返回,可以取得列信息,但是记录可以为0,也可以不为0。这就像一个表,表头一定存在,但是表中可以没有数据。
另外:
mysql_affected_rows()函数的作用是,当执行update insert delete 时,返回影响的行数。
mysql中文文档:
-
php mysql_num_rows和mysql_num_fields获取结果集总行数和总列数
2021-03-03 23:46:46先大概讲解一下这两个行数的基本使用规则...mysql_num_fields()函数获取查询结果集的列数目(即有多少列),该函数同mysql_num_rows一样,也需要接受一个执行mysql_query所返回的资源标识符。mysql_num_rows()与mysql...先大概讲解一下这两个行数的基本使用规则:
mysql_num_rows()函数获取查询结果集的行数目(即总行数),该函数需要接受一个执行mysql_query所返回的资源标识符。
mysql_num_fields()函数获取查询结果集的列数目(即有多少列),该函数同mysql_num_rows一样,也需要接受一个执行mysql_query所返回的资源标识符。
mysql_num_rows()与mysql_num_fields()实例
比如现在有这样一个表,表结构和表数据如下图:
现在分别用mysql_num_rows()与mysql_num_fields()计算结果集的总行数和总列数。
mysql_connect("localhost","root","");
mysql_select_db("test");
$sql = "SELECT student_id,student_name FROM student";
/* http://www.manongjc.com/article/1235.html */
$rs = mysql_query($sql);
echo "结果集一共有".mysql_num_fields($rs)."列
";echo "结果集一共有".mysql_num_rows($rs)."条数据
";?>
输出结果为:
结果集一共有2列
结果集一共有10条数据
因为我们值查询了student_id和student_name两个字段,所以mysql_num_fields($rs)返回2列
而且我们查询的时候没有使用任何where过滤条件,所以mysql_num_rows($rs)返回10行。
-
有关mysql_num_fields()函数的文章推荐10篇
2021-01-20 01:34:131. $row = mysql_fetch_row($result); 返回一个规则的数组$... mysql_num_fields($result) 返回结果的元素个数。 2. $row = mysql_fetch_array($result); 返回一个数组$row. 举例如下: 表结构如下: username | pas...1. $row = mysql_fetch_row($result); 返回一个规则的数组$row,$row[0]是第一个元素,$row[1]是第二个元素,依次类推... mysql_num_fields($result) 返回结果的元素个数。 2. $row = mysql_fetch_array($result); 返回一个数组$row. 举例如下: 表结构如下: username | password ------------------------------------- bourbon | abc berber | efg 第一次运行运行 $row = mysql_fetch_array($result) 则结果如下: $row[0] = $row["username"] = "bourbon" $row[1] = $row["password"] = "abc" 第一次运行运
简介:Nine Million Bicycles:Nine Million Bicycles php访问查询mysql数据的三种方法:1. $row = mysql_fetch_row($result); 返回一个规则的数组$row,$row[0]是第一个元素,$row[1]是第二个元素,依次类推... mysql_num_fields($result) 返回结果的元素个数。 2. $row = mysql_fetch_array($result); 返回一个数组$row. 举例如下: 表结构如下:
简介:php访问查询mysql数据的三种方法。1. $row = mysql_fetch_row($result); 返回一个规则的数组$row,$row[0]是第一个元素,$row[1]是第二个元素,依次类推... mysql_num_fields($result) 返回结果的元素
简介:PHP获取字段数目实现技巧讲解。我们通过对 mysql_num_fields()函数可以将要查询的表内所有字段的数目统计出来,该函数的语法格式如下: int mysql_num_fields ( resource $result ) 其
简介:php获取字段名示例分享。复制代码 代码如下: ?php $link = mysql_connect('localhost', 'username', 'password'); $fields = mysql_list_fields("database", "table", $link); $columns = mysql_num_fields($fi
简介:在php中 取得mysql 列信息的两种方法。1、使用mysql_fetch_field $query=$db->query(" SELECT * FROM $tablename limit 1"); $num=mysql_num_fields($query); for($i=0;$i { $f_db=mysql_fetch_field($query,$i); $showdb[]=$f_db
简介:在php中取得mysql列信息的两种方法。1、使用mysql_fetch_field $query=$db-query( SELECT * FROM $tablename limit 1); $num=mysql_num_fields($query); for($i=0;$i$num;$i++) { $f_db=mysql_fetch_field($query,$i); $showdb[
简介:求正确写法直接看代码:PHP code
while ($row=mysql_fetch_row($result))
{
for ($i=0; $i
{
-
有关mysql_num_fields的10篇文章推荐
2021-02-02 13:00:011. $row = mysql_fetch_row($result); 返回一个规则的数组$... mysql_num_fields($result) 返回结果的元素个数。 2. $row = mysql_fetch_array($result); 返回一个数组$row. 举例如下: 表结构如下: username | pas... -
mysql_num_fields
2021-01-19 11:14:29$fields=mysql_num_fields($result); echo " for ($i=0; $i < mysql_num_fields($result); $i++) //Table Header { print " echo " while ($row = mysql_fetch_row($result)) { //Table body echo... -
四、用mysql_num_fields()、mysql_fetch_array()、mysql_field_name函数操作数据库
2015-01-20 18:30:10$conn=mysql_connect('localhost','root','123456'); mysql_set_charset("utf8"); //设置连接编码 // mysql_select_db('db1'); //选择数据库 $sql="show databases;"; //sql执行的语句 $result=my -
mysql_num_fields与mysql_field_count的区别
2010-12-16 15:09:00通过mysql_num_fields与mysql_field_count的区别反映出sql语句执行的结果的形态。 -
MySQL C API函数mysql_num_fields()在官方翻译网站的低级错误
2021-04-16 17:08:53mysql_num_fields() 首先本人只能表示MySQL官方翻译网站真的坑,我是一枚学习MySQL的小白,看了很多其他人的博客,明明这个函数是返回结果集中列的个数,为什么这个网站说是返回行数了? 因为是官译网站,我就相对于... -
mysql_num_rows()调用出错,!
2021-02-07 12:27:21$name=$_POST['username'];$pwd=$_POST['password...$con=mysql_connect("localhost","root","123456");mysql_select_db("leelogin_db",$con);if($name&&$pwd){$sql="SELECT * FROM lee_tb WHERE username='... -
mysql_fetch_field函数实例用法总结
2021-01-19 03:51:05mysql_init初始化数据库链接–得到一个链接 mysql_real_connect连接数据库服务器 执行mysql_query查询–...获取表头信息–mysql_fetch_fields–表头信息存储在MYSQL_FIELD类型的指针指向的内存空间 解析表头–mysql_... -
PHP mysql_num_fields() 函数
2017-06-08 20:13:12mysql_num_fields($data) 函数返回结果集中字段的数。 $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); }$db_selected = mysql_select_db("test_... -
PHP中mysql_affected_rows()和mysql_num_rows()区别
2021-01-18 21:51:57mysql_affected_rows -- 取得前一次 MySQL 操作所影响的记录行数mysql_num_rows -- 函数返回结果集中行的数目。config.php1 -
C++操作MySQL
2021-01-19 23:56:14声明:本文内容纯属博主自己查找和归纳的个人所需的知识点,仅作...Windows版本:将libmysql.dll、libmysql.lib、mysql.h复制粘贴到项目文件中,或者项目设置里的包含目录和库目录添加路径#include #include#incl... -
为什么明明有结果集但是mysql_num_rows(result)总是为0???
2018-06-11 08:42:06cout << mysql_num_fields(result) ; for(int i=0; i ; ++i) { // 获取下一行 row = mysql_fetch_row(result); if(row ) { break; } // mysql_num_fields()返回结果集中的字段数 for(int j=... -
C++操作mySql数据库
2021-02-05 09:17:431 #include 2 #include 3 #include 4 #include 5 using ...67 intmainconnectMysql()8 {9 //必备的一个数据结构10 MYSQL mydata;1112 //初始化数据库13 if (0 == mysql_library_init(0, NULL, NULL))14 {15 ... -
函数mysql_fetch_field的使用详解
2021-01-27 14:16:15[导读]mysql_fetch_field函数从结果集中取得列信息并作为对象返回。php mysql_fetch_field() 函数定义和用法mysql_fetch_field() 函数从结果集中取得列信息并作为对象返回。mysql_fetch_field() 可以用来从查询... -
mysql编译提示undefined reference to `mysql_init\'-VankeH-ChinaUnix博客
2021-01-21 14:50:16在ubuntu系统安装了mysql后,通过调用mysql API,进行数据...int rc, i, fields;int rows;if (NULL == mysql_init(&stMysql)){fprintf(stderr, "mysql init error:%s\n", mysql_error(&stMysql));return MY... -
“无法解析的外部符号 _mysql_num_rows@4,该符号在函数”问题
2015-11-06 10:47:10链接器里的常规里的附加库目录,路径有没有添加对,一般是C:\Program Files\MySQL\MySQL Server 5.6\lib 还是不行,可能是位数的原因,我系统是64位的,安装的mysql也是64位的,但是工程是32位的,所以可以改安装32... -
phpmysqli_num_fields函数怎么用
2021-04-20 04:55:14php mysqli_num_fields函数用于返回结果集中字段(列)的数量,其语法是mysqli_num_fields(result),参数result必需,指规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符。... -
Warning:mysql_num_rows() expects parameter 1 to be resource,boolean given in F:.....\db_func.php onl
2016-12-08 16:53:02Warning:mysql_num_rows() expects parameter 1 to be resource,boolean given in F:.....\db_func.php online3 应该先判断是否有,用如下代码 ...return mysql_num_rows($res); }else{ return fa -
C语言常用MySQL API函数
2020-08-14 22:50:21常用APImysql_init()mysql_real_connect()mysql_close()mysql_num_fields()mysql_fetch_fields()mysql_fetch_row()mysql_query()mysql_store_result()mysql_free_result()常用结构体MYSQLMYSQL_RESMYSQL_ROWMYSQL_... -
PHP Warning: mysql_num_rows() expects parameter 1 to be resource
2016-06-28 20:13:32导致出现这个错误的原因很可能是你的php版本的不同导致的: 只需要在mysql_num_rows($result)使用外层加上if($result){ }就可以了; -
我怎样才能翻译$ intNumField = mysql_num_fields($ objQuery); 进入面向对象的Php [关闭]
2015-02-19 06:49:57$intNumField = mysql_num_fields($objQuery); $resultArray = array(); while($obResult = mysql_fetch_array($objQuery)) { $arrCol = array(); for($i=0;$i<$intNumField;$i++) { $arrCol[mysql_field... -
Mysql接口API相关函数详细使用说明——mysql_init,mysql_real_connect,mysql_query,mysql_close等相关
2020-07-27 17:15:22MySql接口API相关函数MySql接口API相关函数1、部分API函数总览1.1、部分API函数表1.2、部分MySql结构体说明1.3、API函数使用步骤2、mysql_init()——MYSQL对象初始化2.1、函数原型及参数说明2.2、简单使用3、mysql_... -
mysqli_num_fields() 函数
2019-04-10 07:40:49查看更多 https://www.yuque.com/docs/share/2f020516-f15e-4e5a-ab31-2be6b2f1371e -
C++操作MySQL的实现示例
2021-03-07 16:45:31Windows版本:将libmysql.dll、libmysql.lib、mysql.h复制粘贴到项目文件中,或者项目设置里的包含目录和库目录添加路径#include #include#include "winsock.h"#include "mysql.h"#pragma comment(lib,"libmySQL.lib... -
mysql基本API介绍mysql_init,mysql_real_connect,mysql_query,mysql_close等
2020-05-06 23:55:08https://blog.csdn.net/linux_ever/article/details/50651513 一: 分配或初始化与mysql_real_connect()相适应的MYSQL对象。用mysql_init()函数。 MYSQL *mysql_init(MYSQL... -
PHP mysqli_num_fields() 函数 | 菜鸟教程
2021-01-17 16:34:36PHP mysqli_num_fields() 函数返回结果集中字段(列)的数量:// 假定数据库用户名:root,密码:123456,数据库:RUNOOB$con=mysqli_connect("localhost","root","123456","RUNOOB");if (mysqli_connect_errno($con))...