Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


mariadb:10.4:mysqli

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
mariadb:10.4:mysqli [2019/10/23 13:08]
tanaka [サンプルプログラム]
mariadb:10.4:mysqli [2020/11/20 08:20] (現在)
y2sunlight [サンプルプログラムについて]
行 1: 行 1:
-====== MariaDB10.4 PHPサンプルプログラム ====== +====== MariaDB10.4 PHPサンプルプログラム ====== 
- --- //[[http://www.y2sunlight.com|y2sunlight]] 2019-10-10//+phpMyAdmin 4.9.0.1 (MariaDB 10.4.6)
  
 + --- //[[http://www.y2sunlight.com|y2sunlight]] 2019-10-10//
  
 [[mariadb:top|MariaDBに戻る]] [[mariadb:top|MariaDBに戻る]]
  
 関連記事 関連記事
-  * [[xampp:7.2|XAMPP7.2のインストール]] 
   * [[mariadb:10.4:phpmyadmin|MariaDB10.4 phpMyAdminの使い方]]   * [[mariadb:10.4:phpmyadmin|MariaDB10.4 phpMyAdminの使い方]]
   * MariaDB10.4 PHPサンプルプログラム   * MariaDB10.4 PHPサンプルプログラム
行 13: 行 13:
   * [[mariadb:10.4:transaction|MariaDB10.4 トランザクション]]   * [[mariadb:10.4:transaction|MariaDB10.4 トランザクション]]
  
-----+以下「MySQL」は「MariaDB」に読み替えて下さい。
  
-ここでは、MySQLの動作を理解するために、サンプルプログラム [[#サンプルプログラム|sqlfile.php]] を作成します。このプログラムは次章以降で利用します。+----- 
 + 
 +===== サンプルプログラムについて ===== 
 + 
 +本章では、MySQLの動作を理解するために、サンプルプログラム [[#サンプルプログラム|sqlfile.php]] を作成します。このプログラムは次章以降で利用します。
  
 サンプルプログラムでは MySQLi を使用します。MySQLiは、MySQL(またはMariaDB)データベースとの接続を行うPHP拡張モジュールで、前章で説明した phpMyAdmin でも使用されています。 サンプルプログラムでは MySQLi を使用します。MySQLiは、MySQL(またはMariaDB)データベースとの接続を行うPHP拡張モジュールで、前章で説明した phpMyAdmin でも使用されています。
 +
 +サンプルプログラムでは以下のデータベースを使用します。作り方は、本編の「[[mariadb:10.4:phpmyadmin#データベースの作成]]」を参照して下さい。
 +
 +^ ホスト名 | localhost |
 +^ ポート番号 | 3366|
 +^ データベース名 | sunlight_db |
 +^ 照合順序 | utf8_bin |
 +^ ユーザ名 | sunlight |
 +^ パスワード | sunlight |
  
 参考リンク 参考リンク
   * https://www.php.net/manual/ja/book.mysqli.php   * https://www.php.net/manual/ja/book.mysqli.php
 +
 +本章のサンプルプログラムの最新版はGitHubで公開しています
 +  * https://github.com/y2sunlight/sqlfile
 +
 +> GitHubでは同等の機能のある最新版を公開しています。
 +
 +\\
  
 ===== mysqli クラスの使い方 ===== ===== mysqli クラスの使い方 =====
行 71: 行 91:
 </code> </code>
  
-===== データベースとの接続 =====+\\ 
 + 
 +===== mysqli クラスの使用例 ===== 
 + 
 +==== データベースとの接続 ====
  
- 
 <file php sample1.php> <file php sample1.php>
 <?php <?php
行 97: 行 120:
 </file> </file>
  
-===== テーブルの作成 =====+==== テーブルの作成 ====
  
- 
 <file php sample2.php> <file php sample2.php>
 <?php <?php
行 139: 行 161:
 </file> </file>
  
-===== データの更新 =====+==== データの更新 ====
  
- 
 <file php sample3.php> <file php sample3.php>
 <?php <?php
行 196: 行 217:
 </file> </file>
  
-===== データの検索 =====+==== データの検索 ====
  
- 
 <file php sample4.php> <file php sample4.php>
 <?php <?php
行 250: 行 270:
 </file> </file>
  
 +\\
  
 ===== サンプルプログラム ===== ===== サンプルプログラム =====
行 256: 行 277:
  
   * プログラムはSQLスクリプトファイル(テキストファイル)を読み込みます。   * プログラムはSQLスクリプトファイル(テキストファイル)を読み込みます。
-  * SQLスクリプトファイルにはSQL文、EVAL文、コメントを含みます。\\ 文は;で区切りコメントは#ます。+  * ファイルにはSQL文、EVAL文、コメントを含み文はセミコロン('';'')で区切ります。 
 +  * 行コメント( ''-- Comment'' )とブロックコメント( ''/* Comment */'' )が使用す。 
 +  * 改行を出力したい場合は ''#;'' を行先頭に入力します。
   * SQL文がSELECT文( またはSHOW文 )の場合は検索結果を表示し、非SELECT文の場合はSQLの実行のみ行います。   * SQL文がSELECT文( またはSHOW文 )の場合は検索結果を表示し、非SELECT文の場合はSQLの実行のみ行います。
-  * EVAL文はPHPのeval関数で実行します。但し複文の実行はできません。またクォート処理をしていないので、EVAL echo 'Hellow;'; などは途中で文が区切られエラーになります。\\ 例えば:EVAL sleep(1);+  * EVAL文はPHPのeval関数で実行します。但し複文の実行はできません。例えば:''EVAL sleep(1);'' 
 +  * EVAL文はクォート処理をしていないので、''EVAL echo 'Hellow;';'' などは途中で文が区切られエラーになります。
   * 検索結果及び実行結果はHTMLで出力します。   * 検索結果及び実行結果はHTMLで出力します。
-  * SQLスクリプトファイルはURLのクエリ文字列で指定します。\\ 例えば:<nowiki>http://localhost/mysql/sqlfile.php?f=sample.sql</nowiki>+  * SQLスクリプトファイルはURLのクエリ文字列で指定します。\\ 例えば:''<nowiki>http://localhost/mysql/sqlfile.php?f=sample.sql</nowiki>''
   * クライアント文字セットをUTF8に設定することができます(sオプション)。   * クライアント文字セットをUTF8に設定することができます(sオプション)。
  
行 271: 行 295:
  
 <file sql sample.sql> <file sql sample.sql>
-テーブル作成+-- テーブル作成
 DROP TABLE IF EXISTS syain; DROP TABLE IF EXISTS syain;
 CREATE TABLE syain ( CREATE TABLE syain (
行 280: 行 304:
 ); );
  
-テーブルにデータを挿入+-- テーブルにデータを挿入
 INSERT INTO syain VALUES(1,'Suzuki',3); INSERT INTO syain VALUES(1,'Suzuki',3);
 INSERT INTO syain VALUES(2,'Yamamoto',1); INSERT INTO syain VALUES(2,'Yamamoto',1);
 INSERT INTO syain VALUES(3,'Tanaka',2); INSERT INTO syain VALUES(3,'Tanaka',2);
  
-テーブルの検索+-- テーブルの検索
 SELECT * FROM syain; SELECT * FROM syain;
 </file> </file>
行 358: 行 382:
     foreach( $sql_text as $sql )     foreach( $sql_text as $sql )
     {     {
 +        if ( !$sql || $sql[0]=='#' ) $sql=''; // 先頭の#は改行
 +
         // SQL文表示         // SQL文表示
-        print HTML_Escape(strlen($sql)<60 ? $sql : substr($sql,0,60)." ...");+        print HTML_Escape(strlen($sql)<80 ? $sql : substr($sql,0,80)." ...");
         print "<br />\n";         print "<br />\n";
         ob_flush(); flush();         ob_flush(); flush();
行 451: 行 477:
 function GetSqlText( string $text ) function GetSqlText( string $text )
 { {
-    $sql_text array(); +    $text str_replace(["\r\n","\r"], "\n", $text);
-    $delimiters = "\r\n";+
  
-    $sql  = ''; +    // Remove comment 
-    $line = strtok($text, $delimiters); +    $text = preg_replace("/\/\*.*?\*\//s", '', $text); 
-    while ($line !== false) +    $text preg_replace("/--.*?$/m", ''$text);
-    { +
-        // コメントと前後の空白を除去 +
-        $line = preg_replace( array( "/^#.*/", "/^\s*/", "/\s*$/), '', $line ); +
-        if ($sql && strlen($line)>0) $sql .' '; +
-        $sql .= $line; +
- +
-        // SQL文は ; で区切られる +
-        if ( preg_match("/;$/", $line) ) +
-        { +
-            $sql_text[] = substr($sql,0,-1); +
-            $sql = ''+
-        } +
-        $line = strtok($delimiters); +
-    }+
  
-    return $sql_text;+    // Split SQL text 
 +    $sql = preg_split("/\s*;\s*/", $text); 
 +    array_walk($sql, function(&$item){ 
 +        $item = trim($item); 
 +    }); 
 +    $sql = array_filter($sql, function($val){ 
 +        return !empty(trim($val)); 
 +    }); 
 +    return $sql;
 } }
  
行 561: 行 580:
 } }
 </file> </file>
 +
 +\\
  
mariadb/10.4/mysqli.1571803739.txt.gz · 最終更新: 2019/10/23 13:08 by tanaka