Ground Sunlight

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

ユーザ用ツール

サイト用ツール


mariadb:10.4:mysqli

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
mariadb:10.4:mysqli [2019/10/17 16:38]
y2sunlight [サンプルプログラム]
mariadb:10.4:mysqli [2020/11/20 08:20] (現在)
y2sunlight [サンプルプログラムについて]
行 1: 行 1:
-> **本編は投稿中です。しばらくお待ち下さい。**+====== MariaDB10.4 PHPサンプルプログラム ====== 
 +phpMyAdmin 4.9.0.1 (MariaDB 10.4.6)
  
----- 
- 
-====== MariaDB10.4 PHPサンプルプログラム ====== 
  --- //[[http://www.y2sunlight.com|y2sunlight]] 2019-10-10//  --- //[[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サンプルプログラム
行 17: 行 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 クラスの使い方 =====
行 75: 行 91:
 </code> </code>
  
-===== データベースとの接続 =====+\\ 
 + 
 +===== mysqli クラスの使用例 ===== 
 + 
 +==== データベースとの接続 ====
  
- 
 <file php sample1.php> <file php sample1.php>
 <?php <?php
行 101: 行 120:
 </file> </file>
  
-===== テーブルの作成 =====+==== テーブルの作成 ====
  
- 
 <file php sample2.php> <file php sample2.php>
 <?php <?php
行 143: 行 161:
 </file> </file>
  
-===== データの更新 =====+==== データの更新 ====
  
- 
 <file php sample3.php> <file php sample3.php>
 <?php <?php
行 200: 行 217:
 </file> </file>
  
-===== データの検索 =====+==== データの検索 ====
  
- 
 <file php sample4.php> <file php sample4.php>
 <?php <?php
行 254: 行 270:
 </file> </file>
  
 +\\
  
 ===== サンプルプログラム ===== ===== サンプルプログラム =====
行 260: 行 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オプション)。
  
 === サンプルプログラムを使った例 === === サンプルプログラムを使った例 ===
-ブラウザからサンプルプログラム(sqlfile.cgi)を実行します。+ブラウザからサンプルプログラム(sqlfile.php)を実行します。
  
 <code> <code>
-http://localhost/mysql/sqlfile.php?f=sample.sql+http://localhost/mysql/sqlfile.php?f=sample.sql&s=1
 </code> </code>
  
 <file sql sample.sql> <file sql sample.sql>
-テーブル作成+-- テーブル作成
 DROP TABLE IF EXISTS syain; DROP TABLE IF EXISTS syain;
 CREATE TABLE syain ( CREATE TABLE syain (
行 283: 行 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>
  
 実行結果 実行結果
-[{{:mariadb:10.4:sqlfile01.png?nolink|}}]+[{{:mariadb:10.4:sqlfile01.png?nolink|}}] //
  
-=== サンプルプログラム( sqlfile.cgi )のソース ===+//  
 + 
 +=== サンプルプログラム( sqlfile.php )のソース ===
  
 <file php sqlfile.php> <file php sqlfile.php>
行 331: 行 354:
 { {
     die($mysqli->connect_errno . ' : ' . $mysqli->connect_error);     die($mysqli->connect_errno . ' : ' . $mysqli->connect_error);
 +}
 +
 +// 文字セットの指定
 +if (isset($_REQUEST['s']))
 +{
 +    $mysqli->query('SET NAMES utf8');
 } }
  
行 353: 行 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();
行 446: 行 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文は ; で区切られる +    // Split SQL text 
-        if ( preg_match("/;$/", $line) +    $sql = preg_split("/\s*;\s*/", $text); 
-        { +    array_walk($sql, function(&$item){ 
-            $sql_text[] = substr($sql,0,-1); +        $item trim($item)
-            $sql ''+    }); 
-        +    $sql array_filter($sql, function($val){ 
-        $line strtok($delimiters); +        return !empty(trim($val)); 
-    } +    }); 
-    return $sql_text;+    return $sql;
 } }
  
行 505: 行 530:
 function HTML_Escape( string $str ) function HTML_Escape( string $str )
 { {
-    // return htmlentities( $str, ENT_QUOTES, C_CHARSET ); 
     return htmlentities( $str, ENT_QUOTES, "utf-8" );     return htmlentities( $str, ENT_QUOTES, "utf-8" );
 } }
行 516: 行 540:
 function FORM_Escape( string $str ) function FORM_Escape( string $str )
 { {
-    // return htmlspecialchars( $str, ENT_QUOTES, C_CHARSET ); 
     return htmlspecialchars( $str, ENT_QUOTES, "utf-8" );     return htmlspecialchars( $str, ENT_QUOTES, "utf-8" );
 } }
行 525: 行 548:
 function HTML_Begin() function HTML_Begin()
 { {
-    header('Content-type: text/html; charset=uft8');+    header('Content-type: text/html; charset=utf8');
     print <<<EOF     print <<<EOF
 <html> <html>
行 557: 行 580:
 } }
 </file> </file>
 +
 +\\
  
mariadb/10.4/mysqli.1571297914.txt.gz · 最終更新: 2019/10/17 16:38 by y2sunlight