ホームページ データベース mysql チュートリアル PHP データベース拡張機能 mysqli の詳細な使用方法チュートリアル

PHP データベース拡張機能 mysqli の詳細な使用方法チュートリアル

Nov 26, 2016 pm 05:08 PM
mysqli php

mysqli は、データベースと対話するための 2 つの方法、オブジェクト指向とプロセス指向を提供します。これらの 2 つの方法をそれぞれ見てみましょう。

関連する mysql ビデオチュートリアル: "mysql チュートリアル"

1. オブジェクト指向

オブジェクト指向のアプローチでは、mysqli はクラスにカプセル化され、その構築方法は次のとおりです:

__construct ([ string $host [, string $username [, string $passwd [, string $dbname[, int $port [, string $socket ]]]]]] )
ログイン後にコピー

上記の構文では、関連するパラメータを以下に説明します。

host: 接続されているサーバーのアドレス。

username: データベースに接続するためのユーザー名。デフォルト値はサーバープロセス所有者のユーザー名です。

passwd: データベースに接続するためのパスワード。デフォルト値は空です。

dbname: 接続されているデータベースの名前。

ポート: TCP ポート番号。

ソケット: UNIXドメインソケット。

MySQL との接続を確立するには、次のコードのようなコンストラクター メソッドを通じて mysqli クラスをインスタンス化できます。

<?php
    $db_host="localhost"; //连接的服务器地址
    $db_user="root"; //连接数据库的用户名
    $db_psw="root"; //连接数据库的密码
    $db_name="sunyang"; //连接的数据库名称
    $mysqli=new mysqli($db_host,$db_user,$db_psw,$db_name);
?>
ログイン後にコピー

mysqli は、MySQL に接続するためのメンバー メソッド connect() も提供します。空のコンストラクター メソッドを使用して mysqli クラスをインスタンス化する場合、たとえば、次のコードのように、mysqli オブジェクトの connect() メソッドを呼び出して MySQL に接続することもできます。

<?php
    $db_host="localhost"; //连接的服务器地址
    $db_user="root"; //连接数据库的用户名
    $db_psw="root"; //连接数据库的密码
    $db_name="sunyang"; //连接的数据库名称
    $mysqli=new mysqli();
    $mysqli->connect($db_host,$db_user,$db_psw,$db_name);
?>
ログイン後にコピー

close を呼び出して、MySQL サーバーとの接続を閉じます。 mysqli オブジェクトの () メソッド、例:

$mysqli->close();
ログイン後にコピー

2. プロセス指向

プロセス指向の方法では、mysqli 拡張機能は MySQL との接続を確立するための関数 mysqli_connect() を提供します。関数は次のとおりです:

mysqli mysqli_connect ([ string $host [, string $username [, string $passwd[, string $dbname [, int $port [, string $socket ]]]]]] )
ログイン後にコピー

mysqli_connect() 関数の使用法は mysql と同じです。 拡張機能での mysql_connect() 関数の使用法は非常に似ています。 以下は、mysqli_connect() 関数の使用例です。 :

<?php
    $connection = mysqli_connect("localhost","root","root","sunyang");
    if ( $connection ) {
        echo "数据库连接成功";
    }else {
        echo "数据库连接失败";
    }
?>
ログイン後にコピー

mysqli_close() 関数を使用して、MySQL サーバーとの接続を閉じます。例:

mysqli_close();
ログイン後にコピー

3. mysqli を使用してデータにアクセスする

mysqli を使用してデータにアクセスする方法には、オブジェクト指向およびプロセス指向のメソッドも含まれます。このセクションでは、オブジェクト指向メソッドを使用して MySQL と対話する方法についてのみ説明します。mysqli 拡張機能でのプロセス指向メソッドの使用については、ここでは詳しく説明しません。興味のある読者は、関連する公式ドキュメントを参照してください。情報。

mysqli では、query() メソッドを使用してクエリを実行します。このメソッドの構文形式は次のとおりです。

mixed query ( string $query [, int $resultmode ] )
ログイン後にコピー

上記の構文に含まれるパラメータは次のように説明されます。

query: に送信される SQL ステートメント。サーバ。

resultmode: このパラメータは 2 つの値を受け入れます。1 つは MYSQLI_STORE_RESULT で、結果がバッファリングされたセットとして返されることを示し、もう 1 つは MYSQLI_USE_RESULT で、結果がバッファリングされていないセットとして返されることを示します。

以下は、 query() メソッドを使用してクエリを実行する例です:

query($query);
    if ($result) {
        if($result->num_rows>0){ //判断结果集中行的数目是否大于0
            while($row =$result->fetch_array() ){ //循环输出结果集中的记录
                echo ($row[0])."
"; echo ($row[1])."
"; echo ($row[2])."
"; echo ($row[3])."
"; echo "
"; } } }else { echo "查询失败"; } $result->free(); $mysqli->close(); ?>
ログイン後にコピー

上記のコードでは、num_rows は結果セットの属性であり、結果セット内の行数を返します。 fetch_array() メソッドは、結果セット内のレコードを配列に入れて返します。最後に、free() メソッドを使用して結果セット内のメモリを解放し、close() メソッドを使用してデータベース接続を閉じます。

レコードの削除 (delete)、レコードの保存 (insert)、およびレコードの変更 (update) の操作も、query() メソッドを使用して実行されます。 以下は、レコードの削除の例です:

query($query);
    if ($result){
        echo "删除操作执行成功";
    }else {
        echo "删除操作执行失败";
    }
    $mysqli->close();
?>
ログイン後にコピー

レコードの保存 (insert)、変更 記録 (update) の操作は、レコードの削除 (delete) の操作に似ています。それに応じて SQL ステートメントを変更するだけです。

4. プリペアドステートメント

プリペアドステートメントを使用すると、再利用されたステートメントのパフォーマンスを向上させることができます。PHP では、prepare() メソッドを使用してプリペアドステートメントをクエリし、execute() メソッドを使用してプリペアドステートメントを実行します。 PHP には 2 種類のプリペアド ステートメントがあります。1 つは結果をバインドするもの、もう 1 つはパラメータをバインドするものです。

(1) バインド結果

いわゆるバインド結果は、PHP スクリプト内のカスタム変数を結果セット内の対応するフィールドにバインドします。これらの変数は、クエリされたレコードを表します。バインディング結果のサンプル コードは次のとおりです。結果をバインドする場合、スクリプト内の変数は結果セット内のフィールドと 1 対 1 に対応する必要があります。バインド後、 fetch() メソッドを使用して結果セットにバインドされた変数を 1 つずつ取得します。 、最後に、前処理接続とデータベース接続が個別に閉じられます。

(2) バインドパラメータ

いわゆるバインドパラメータは、PHP スクリプトのカスタム変数を SQL ステートメントのパラメータにバインドするものです (パラメータは "?" に置き換えられます)。バインドパラメータは、bind_param() を使用します。 ) メソッドの構文形式は次のとおりです。

prepare($query); //进行预准备语句查询
    $result->execute(); //执行预准备语句
    $result->bind_result($id,$number,$name,$age); //绑定结果
    while ($result->fetch()) {
        echo $id;
        echo $number;
        echo $name;
        echo $age;
    }
    $result->close(); //关闭预准备语句
    $mysqli->close(); //关闭连接
?>
ログイン後にコピー

上記の構文に含まれるパラメータは次のように説明されます。

types: バインドされた変数のデータ型。以下の表に示すように、受け入れられる文字型は 4 つあります (パラメーターの型とバインドされた変数で受け入れられる文字の型は 1 対 1 に対応する必要があります)。

PHP データベース拡張機能 mysqli の詳細な使用方法チュートリアルvar1: バインドされた変数の数は、SQL ステートメント内のパラメーターの数と一致している必要があります。

バインドパラメータのサンプルコードは次のとおりです:

bool bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
ログイン後にコピー

1 つのスクリプトでパラメータとバインド結果を同時にバインドすることもできます。サンプルコードは次のとおりです:

prepare($query);
    $result->bind_param("ssi",$number,$name,$age); //绑定参数
    $number='sy0807';
    $name='employee7';
    $age=20;
    $result->execute(); //执行预准备语句
    $result->close();
    $mysqli->close();
?>
ログイン後にコピー

5. 複数のクエリ

mysqli 拡張機能が提供します。複数のクエリを連続して実行する機能 クエリの multi_query() メソッドの構文形式は次のとおりです:

prepare($query);
    $result->bind_param("i",$emp_id); //绑定参数
    $emp_id=4;
    $result->execute();
    $result->bind_result($id,$number,$name,$age); //绑定结果
    while ($result->fetch()) {
        echo $id."
"; echo $number."
"; echo $name."
"; echo $age."
"; } $result->close(); $mysqli->close(); ?>
ログイン後にコピー

複数のクエリを実行する場合、最後のクエリ ステートメントを除き、各クエリ ステートメントは「;」で区切る必要があります。 。複数のクエリを実行するサンプルコードは次のとおりです:

 $mysqli=new mysqli("localhost","root","root","sunyang"); //实例化mysqli
    $query = "select emp_name from employee ;";
    $query .= "select dep_name from depment ";
    if ($mysqli->multi_query($query)) { //执行多个查询
        do {
            if ($result = $mysqli->store_result()) {
                while ($row = $result->fetch_row()) {
                    echo $row[0];
                    echo "
"; } $result->close(); } if ($mysqli->more_results()) { echo ("-----------------
"); //连个查询之间的分割线 } } while ($mysqli->next_result()); } $mysqli->close();//关闭连接 ?>
ログイン後にコピー

在上述代码中,store_result()方法用于获得一个缓冲结果集; fetch_row()方法的作用类似于fetch_array()方法;more_results()方法用于从一个多查询中检查是否还有更多的查询结果;next_result()方法用于从一个多查询中准备下一个查询结果。

6、事务操作

首先只有数据库中表的类型为InnoDB时,才支持事务提交,建议使用InnoDB,更建议使用mysqli扩展库了,不仅因为mysqli支持多条sql查询,更是因为它的速度、性能、安全更可靠,而且完全面向对象,当然也可以是面向过程操作。

看下面mysqli对事务操作的php代码:

query("set names utf8");
    if ($mysqli->connect_error){
        die("连接错误:".$mysqli->connect_error);
    }
    //将事务提交设为false
    $mysqli->autocommit(false);
    $sql = "insert into `user` values(null,'小红',md5(123),'321321')";
    $sql2 = "insert into `user` values(null,'小王',md5(321),'dasf')";
    //执行操作,返回的是bool值
    $query = $mysqli->query($sql);
    $query2 = $mysqli->query($sql2);
 
    if ($query && $query2){
        $mysqli->commit();
        echo "操作成功";
    }else{
        echo "操作失败".$mysqli->error;
        $mysqli->rollback();
    }
    $mysqli->autocommit(true);
    $mysqli->close();
?>
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles