mysqli は複数のステートメントをバッチで実行し、1 つの関数呼び出しで複数のステートメントを実行します。
この記事では主に、MySQL で複数のステートメントをバッチで実行する方法と、1 つの関数呼び出しで複数のステートメントを実行する方法について説明します。この記事の例を通じて、独自のアイデアを得ることができれば幸いです。
単一の文字列で指定された複数のステートメントの実行をサポートします。特定の接続でこの機能を使用するには、接続を開くときに mysql_real_connect() の flags パラメータに CLIENT_MULTI_STATEMENTS オプションを指定する必要があります。 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); }
上記は、1 つの関数呼び出しで複数のステートメントを実行するための MySQL エントリの内容です。
次に、主に mysqli を実装して複数のステートメントをバッチで実行するための PHP の方法を紹介し、mysqli に接続して複数のステートメントをバッチで実行するための PHP の関連操作スキルをサンプルの形で分析します
詳細は次のとおりです。次のように:
複数の操作または複数の結果セットを一度に実行できます。
例:
<?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 は複数のステートメントをバッチで実行し、1 つの関数呼び出しで複数のステートメントを実行します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP を使用して Web アプリケーションを作成する場合、データの保存に MySQL データベースがよく使用されます。 PHP は、MySQLi と呼ばれる MySQL データベースと対話する方法を提供します。ただし、MySQLi を使用している場合、以下に示すようなエラー メッセージが表示されることがあります。 PPHPFatalerror:Calltounknownfunctionmysqli_connect() このエラー メッセージは、PHP が MySQLi を見つけられないことを意味します。

php が mysqli に接続できない場合の解決策: 1. 「php.ini」ファイルを開きます; 2. 「mysqli.reconnect」を見つけます; 3. 「mysqli.reconnect = OFF」を「mysqli.reconnect = on」に変更します。

PDOPDO は、PHP に統合インターフェイスを提供するオブジェクト指向のデータベース アクセス抽象化レイヤーであり、同じコードを使用して異なるデータベース (Mysql、postgresql、oracle など) と対話できるようにします。 PDO は、基礎となるデータベース接続の複雑さを隠し、データベース操作を簡素化します。長所と短所 長所: 統一されたインターフェイス、複数のデータベースのサポート、データベース操作の簡素化、開発の困難さの軽減、プリペアドステートメントの提供、セキュリティの向上、トランザクション処理のサポート 短所: パフォーマンスはネイティブ拡張よりわずかに低い場合があり、外部ライブラリに依存し、オーバーヘッドが増加する可能性があります。デモ コードでは PDO を使用します。 mysql データベースに接続します: $db=newPDO("mysql:host=localhost;dbnam

PHP を使用して MySQL データベースに接続するときに次のエラー メッセージが表示された場合: PHPWarning:mysqli_connect():(HY000/2002):Connection拒否された場合は、以下の手順に従ってこの問題の解決を試みることができます。 MySQL サービスが正常に動作しているかどうかを確認するには、まず MySQL サービスが正常に動作しているかどうかを確認する必要がありますが、サービスが動作していない、または開始に失敗している場合は、接続拒否エラーが発生する可能性があります。あなたはできる

mysql の実行ファイルは mysqld です。mysqld は、Mysql サーバー プログラムを表す実行可能ファイルです。このファイルを実行すると、サーバー プロセスを直接開始できます。mysqld_safe は、間接的に mysqld を呼び出し、モニターも開始する起動スクリプトです。 。

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

mysqli 拡張機能を使用して MySQL データベースに接続し、操作すると、PHPFatalerror:Calltoundefinemethodmysqli::prepare() エラーが発生することがあります。このエラーは通常、次の理由によって発生します: PHP での mysqli 拡張機能のサポートが不十分であること、mysqli 拡張機能が正しくロードまたは構成されていないこと、PHP コードに構文エラーがあること、MySQL サーバーが正しく構成または実行されていないこと

Web アプリケーションの開発に伴い、PHP 言語は Web 開発で広く使用されています。 PHP8.0 バージョンでは、新しい言語機能である multi-catch ステートメントが導入されました。マルチキャッチステートメントとは何ですか?以前の PHP バージョンでは、開発者は複数の例外タイプを処理するために複数の catch ステートメントを作成する必要がありました。たとえば、次のコード ブロックは 2 つの異なる例外の処理を示しています。
