Rumah > pembangunan bahagian belakang > tutorial php > mysqli批量执行多条语句和一次函数调用执行多条语句方法

mysqli批量执行多条语句和一次函数调用执行多条语句方法

小云云
Lepaskan: 2023-03-19 21:04:01
asal
2278 orang telah melayarinya

本文主要和大家分享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));
Salin selepas log masuk

具体看代码:

#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);
}
Salin selepas log masuk

以上就是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();
?>
Salin selepas log masuk

相关推荐:

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

Atas ialah kandungan terperinci mysqli批量执行多条语句和一次函数调用执行多条语句方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan