搜索
首页后端开发php教程mysqli批量执行多条语句和一次函数调用执行多条语句方法

本文主要和大家分享mysqli批量执行多条语句和一次函数调用执行多条语句方法,希望大家通过本文的实例能有自己的思路。

支持在单个字符串中指定的多语句的执行。要想与给定的连接一起使用该功能,打开连接时,必须将标志参数中的CLIENT_MULTI_STATEMENTS选项指定给mysql_real_connect()。也可以通过调用mysql_set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON),为已有的连接设置它。

常用套路:

   
/* Connect to server with option CLIENT_MULTI_STATEMENTS */
mysql_real_connect(..., CLIENT_MULTI_STATEMENTS);
/* Now execute multiple queries */
mysql_query(mysql,"DROP TABLE IF EXISTS test_table;\
                   CREATE TABLE test_table(id INT);\
                   INSERT INTO test_table VALUES(10);\
                   UPDATE test_table SET id=20 WHERE id=10;\
                   SELECT * FROM test_table;\
                   DROP TABLE test_table");
do
{
  /* Process all results */
  ...
  printf("total affected rows: %lld", mysql_affected_rows(mysql));
  ...
  if (!(result= mysql_store_result(mysql)))
  {
     printf(stderr, "Got fatal error processing query\n");
     exit(1);
  }
  process_result_set(result); /* client function */
  mysql_free_result(result);
} while (!mysql_next_result(mysql));

具体看代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <termios.h>
#include <mysql/mysql.h>
void process_result_set(MYSQL       *mysql, MYSQL_RES *result)
{
        int i =0;
        unsigned int fieldnum;
        //从结果集,获取表头信息
        MYSQL_FIELD *fields = mysql_fetch_fields(result);
        fieldnum = mysql_field_count(mysql);
        for (i=0; i<fieldnum; i++)
        {
            printf("%s\t", fields[i].name);
        }
        printf("\n");
        //从结果集, 按照行获取信息信息
        MYSQL_ROW row = NULL;
        //从结果集中一行一行的获取数据
        while (  row = mysql_fetch_row(result))
        {
            fieldnum = mysql_field_count(mysql);
            //优化,我的行有多少列。。。。查找这样的api函数
            for (i=0; i<fieldnum; i++) //经过测试 发现 不是以0结尾的指针数组。。
            {
                printf("%s\t", row[i]);
            }
            printf("\n");
        }
}
int main()
{
    int         ret = 0, status = 0;
    MYSQL       *mysql;
    MYSQL_RES   *result;
    MYSQL_ROW   row;
    char        *query;
    mysql = mysql_init(NULL);
    mysql =mysql_real_connect(mysql, "localhost", "root", "123456", "mydb2", 0, NULL, CLIENT_MULTI_STATEMENTS);
    if (mysql == NULL)
    {
        ret = mysql_errno(mysql);
        printf("func mysql_real_connect() err\n");
        return ret;
    }
    else
    {
        printf(" ok......\n");
    }
    /* execute multiple statements */
status = mysql_query(mysql,
"DROP TABLE IF EXISTS test_table;\
CREATE TABLE test_table(id INT);\
INSERT INTO test_table VALUES(10);\
UPDATE test_table SET id=20 WHERE id=10;\
SELECT * FROM test_table;\
DROP TABLE test_table");
    if (status)
    {
        printf("Could not execute statement(s)");
        mysql_close(mysql);
        exit(0);
    }
    /* process each statement result */
    do {
            /* did current statement return data? */
            result = mysql_store_result(mysql);
            if (result)
            {
                /* yes; process rows and free the result set */
                process_result_set(mysql, result);
                mysql_free_result(result);
            }
            else /* no result set or error */
            {
                if (mysql_field_count(mysql) == 0)
                {
                    printf("%lld rows affected\n",
                    mysql_affected_rows(mysql));
                }
                else /* some error occurred */
                {
                    printf("Could not retrieve result set\n");
                    break;
                }
            }
        /* more results? -1 = no, >0 = error, 0 = yes (keep looping) */
        if ((status = mysql_next_result(mysql)) > 0)
                printf("Could not execute statement\n");
    } while (status == 0);
    mysql_close(mysql);
}

以上就是MySQL入门之一次函数调用执行多条语句的内容。

接下来我们主要介绍了PHP实现mysqli批量执行多条语句的方法,结合实例形式分析了php连接mysqli并批量执行多条语句的相关操作技巧,

具体如下:

可以一次性的执行多个操作或取回多个结果集。

实例:


<?php
$mysqli = new mysqli("localhost", "root", "111111", "test");
/* check connection */
if (mysqli_connect_errno()) {
  printf("Connect failed: %s\n", mysqli_connect_error());
  exit();
}
/* multi_query执行一个或多个针对数据库的查询。多个查询用分号进行分隔。 */
$query = "SELECT * from test where id = 1;";
$query .= "SELECT name FROM test";
/* 批量执行查询 ,如果第一个查询失败则返回 FALSE。*/
if ($mysqli->multi_query($query)) {
  do {
    /* 获取第一个结果集 */
    if ($result = $mysqli->store_result()) {
      while ($row = $result->fetch_row()) {
        printf("%s\n", $row[0]);
      }
      $result->free();
    }
    /* 检查一个多查询是否有更多的结果 */
    if ($mysqli->more_results()) {
      printf("-----------------\n");
    }
    //准备下一个结果集
  } while ($mysqli->next_result());
}
/* close connection */
$mysqli->close();
?>

相关推荐:

MySQL 一次执行多条语句的实现及常见问题

以上是mysqli批量执行多条语句和一次函数调用执行多条语句方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP Fatal error: Call to undefined function mysqli_connect()的解决方法PHP Fatal error: Call to undefined function mysqli_connect()的解决方法Jun 23, 2023 am 09:40 AM

在使用PHP编写Web应用程序时,经常会使用MySQL数据库来存储数据。PHP提供了一种与MySQL数据库进行交互的方法,称为MySQLi。然而,有时在使用MySQLi时,会遇到一个错误信息,如以下所示:PHPFatalerror:Calltoundefinedfunctionmysqli_connect()这个错误信息意味着PHP无法找到my

php无法连接mysqli怎么办php无法连接mysqli怎么办Nov 09, 2022 am 10:07 AM

php无法连接mysqli的解决办法:1、打开“php.ini”文件;2、找到“mysqli.reconnect”;3、将“mysqli.reconnect = OFF”改成“mysqli.reconnect = on”即可。

mysql的运行文件是什么mysql的运行文件是什么Apr 11, 2023 am 10:38 AM

mysql的运行文件是mysqld;mysqld是一个可执行文件,代表着Mysql服务器程序,执行这个文件可以直接启动一个服务器进程;而mysqld_safe是一个启动脚本,它会间接调用mysqld,并且还会顺带启动一个监控进程。

PHP PDO 与 mysqli:比较和对比PHP PDO 与 mysqli:比较和对比Feb 19, 2024 pm 12:24 PM

PDOPDO是一个面向对象的数据库访问抽象层,它为PHP提供了一个统一的接口,允许您使用相同的代码与不同的数据库(如Mysql、postgresql、oracle)进行交互。PDO隐藏了底层数据库连接的复杂性,简化了数据库操作。优缺点优点:统一接口,支持多种数据库简化数据库操作,降低开发难度提供预处理语句,提高安全性支持事务处理缺点:性能可能比原生扩展稍低依赖外部库,可能会增加开销演示代码使用PDO连接mysql数据库:$db=newPDO("mysql:host=localhost;dbnam

PHP Warning: mysqli_connect(): (HY000/2002): Connection refused的解决方法PHP Warning: mysqli_connect(): (HY000/2002): Connection refused的解决方法Jun 23, 2023 am 08:54 AM

如果你使用PHP连接MySQL数据库时遇到了以下错误提示:PHPWarning:mysqli_connect():(HY000/2002):Connectionrefused那么你可以尝试按照下面的步骤来解决这个问题。确认MySQL服务是否正常运行首先应该检查MySQL服务是否正常运行,如果服务未运行或者启动失败,就可能会导致连接被拒绝的错误。你可

在PHP中使用MySQLi建立数据库连接的详尽教程在PHP中使用MySQLi建立数据库连接的详尽教程Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP Fatal error: Call to undefined method mysqli::prepare()的解决方法PHP Fatal error: Call to undefined method mysqli::prepare()的解决方法Jun 23, 2023 am 11:21 AM

当使用mysqli扩展来连接和操作MySQL数据库时,有时会遇到PHPFatalerror:Calltoundefinedmethodmysqli::prepare()的错误。这个错误通常是由以下几个原因引起的:PHP对mysqli扩展的支持不足;mysqli扩展没有正确加载或配置;PHP代码存在语法错误;MySQL服务器没有正确配置或正在运行

PHP Fatal error: Call to undefined function mysqli_stmt_bind_param()的解决方法PHP Fatal error: Call to undefined function mysqli_stmt_bind_param()的解决方法Jun 23, 2023 am 10:43 AM

在使用PHP开发网站时,数据库的操作是非常常见的。而MySQLi是PHP中常用的操作MySQL数据库的扩展,提供了比较完备的面向对象接口、过程化接口,以及支持预处理语句的操作。但是有时候我们在使用mysqli的预处理语句时,会遇到这样的错误:PHPFatalerror:Calltoundefinedfunctionmysqli_stmt_bin

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中