このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
mariadb:10.4:mysqli [2019/10/17 16:39] 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サンプルプログラム ====== | ||
--- // | --- // | ||
- | |||
[[mariadb: | [[mariadb: | ||
関連記事 | 関連記事 | ||
- | * [[xampp: | ||
* [[mariadb: | * [[mariadb: | ||
* MariaDB10.4 PHPサンプルプログラム | * MariaDB10.4 PHPサンプルプログラム | ||
行 17: | 行 13: | ||
* [[mariadb: | * [[mariadb: | ||
- | ---- | + | 以下「MySQL」は「MariaDB」に読み替えて下さい。 |
- | ここでは、MySQLの動作を理解するために、サンプルプログラム [[# | + | ----- |
+ | |||
+ | ===== サンプルプログラムについて ===== | ||
+ | |||
+ | 本章では、MySQLの動作を理解するために、サンプルプログラム [[# | ||
サンプルプログラムでは MySQLi を使用します。MySQLiは、MySQL(またはMariaDB)データベースとの接続を行うPHP拡張モジュールで、前章で説明した phpMyAdmin でも使用されています。 | サンプルプログラムでは MySQLi を使用します。MySQLiは、MySQL(またはMariaDB)データベースとの接続を行うPHP拡張モジュールで、前章で説明した phpMyAdmin でも使用されています。 | ||
+ | |||
+ | サンプルプログラムでは以下のデータベースを使用します。作り方は、本編の「[[mariadb: | ||
+ | |||
+ | ^ ホスト名 | localhost | | ||
+ | ^ ポート番号 | 3366| | ||
+ | ^ データベース名 | sunlight_db | | ||
+ | ^ 照合順序 | utf8_bin | | ||
+ | ^ ユーザ名 | sunlight | | ||
+ | ^ パスワード | sunlight | | ||
参考リンク | 参考リンク | ||
* https:// | * https:// | ||
+ | |||
+ | 本章のサンプルプログラムの最新版はGitHubで公開しています | ||
+ | * https:// | ||
+ | |||
+ | > GitHubでは同等の機能のある最新版を公開しています。 | ||
+ | |||
+ | \\ | ||
===== mysqli クラスの使い方 ===== | ===== mysqli クラスの使い方 ===== | ||
行 75: | 行 91: | ||
</ | </ | ||
- | ===== データベースとの接続 | + | \\ |
+ | |||
+ | ===== mysqli クラスの使用例 ===== | ||
+ | |||
+ | ==== データベースとの接続 ==== | ||
- | 例 | ||
<file php sample1.php> | <file php sample1.php> | ||
<?php | <?php | ||
行 101: | 行 120: | ||
</ | </ | ||
- | ===== テーブルの作成 | + | ==== テーブルの作成 ==== |
- | 例 | ||
<file php sample2.php> | <file php sample2.php> | ||
<?php | <?php | ||
行 143: | 行 161: | ||
</ | </ | ||
- | ===== データの更新 | + | ==== データの更新 ==== |
- | 例 | ||
<file php sample3.php> | <file php sample3.php> | ||
<?php | <?php | ||
行 200: | 行 217: | ||
</ | </ | ||
- | ===== データの検索 | + | ==== データの検索 ==== |
- | 例 | ||
<file php sample4.php> | <file php sample4.php> | ||
<?php | <?php | ||
行 254: | 行 270: | ||
</ | </ | ||
+ | \\ | ||
===== サンプルプログラム ===== | ===== サンプルプログラム ===== | ||
行 260: | 行 277: | ||
* プログラムはSQLスクリプトファイル(テキストファイル)を読み込みます。 | * プログラムはSQLスクリプトファイル(テキストファイル)を読み込みます。 | ||
- | * SQLスクリプトファイルにはSQL文、EVAL文、コメントを含みます。\\ | + | * ファイルにはSQL文、EVAL文、コメントを含み、文はセミコロン('' |
+ | * 行コメント( '' | ||
+ | * 改行を出力したい場合は ''#;'' | ||
* SQL文がSELECT文( またはSHOW文 )の場合は検索結果を表示し、非SELECT文の場合はSQLの実行のみ行います。 | * SQL文がSELECT文( またはSHOW文 )の場合は検索結果を表示し、非SELECT文の場合はSQLの実行のみ行います。 | ||
- | * EVAL文はPHPのeval関数で実行します。但し複文の実行はできません。またクォート処理をしていないので、EVAL echo ' | + | * EVAL文はPHPのeval関数で実行します。但し複文の実行はできません。例えば:'' |
+ | * EVAL文はクォート処理をしていないので、'' | ||
* 検索結果及び実行結果はHTMLで出力します。 | * 検索結果及び実行結果はHTMLで出力します。 | ||
- | * SQLスクリプトファイルはURLのクエリ文字列で指定します。\\ 例えば:< | + | * SQLスクリプトファイルはURLのクエリ文字列で指定します。\\ 例えば:'' |
+ | * クライアント文字セットをUTF8に設定することができます(sオプション)。 | ||
=== サンプルプログラムを使った例 === | === サンプルプログラムを使った例 === | ||
- | ブラウザからサンプルプログラム(sqlfile.cgi)を実行します。 | + | ブラウザからサンプルプログラム(sqlfile.php)を実行します。 |
< | < | ||
- | http:// | + | http:// |
</ | </ | ||
<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,' | INSERT INTO syain VALUES(1,' | ||
INSERT INTO syain VALUES(2,' | INSERT INTO syain VALUES(2,' | ||
INSERT INTO syain VALUES(3,' | INSERT INTO syain VALUES(3,' | ||
- | # テーブルの検索 | + | -- テーブルの検索 |
SELECT * FROM syain; | SELECT * FROM syain; | ||
</ | </ | ||
実行結果 | 実行結果 | ||
- | [{{: | + | [{{: |
- | // | + | // |
- | === サンプルプログラム( sqlfile.cgi )のソース === | + | === サンプルプログラム( sqlfile.php )のソース === |
<file php sqlfile.php> | <file php sqlfile.php> | ||
行 333: | 行 354: | ||
{ | { | ||
die($mysqli-> | die($mysqli-> | ||
+ | } | ||
+ | |||
+ | // 文字セットの指定 | ||
+ | if (isset($_REQUEST[' | ||
+ | { | ||
+ | $mysqli-> | ||
} | } | ||
行 355: | 行 382: | ||
foreach( $sql_text as $sql ) | foreach( $sql_text as $sql ) | ||
{ | { | ||
+ | if ( !$sql || $sql[0]=='#' | ||
+ | |||
// SQL文表示 | // SQL文表示 | ||
- | print HTML_Escape(strlen($sql)< | + | print HTML_Escape(strlen($sql)< |
print "< | print "< | ||
ob_flush(); flush(); | ob_flush(); flush(); | ||
行 448: | 行 477: | ||
function GetSqlText( string $text ) | function GetSqlText( string $text ) | ||
{ | { | ||
- | $sql_text | + | $text = str_replace([" |
- | $delimiters = " | + | |
- | | + | |
- | | + | $text = preg_replace("/ |
- | while ($line !== false) | + | $text = preg_replace("/ |
- | { | + | |
- | // コメントと前後の空白を除去 | + | |
- | $line = preg_replace( array( "/^#.*/", "/^\s*/", "/\s*$/" | + | |
- | if ($sql && strlen($line)>0) $sql .= ' '; | + | |
- | | + | |
- | | + | |
- | if ( preg_match("/;$/", $line) ) | + | $sql = preg_split("/\s*;\s*/", $text); |
- | { | + | |
- | $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; |
} | } | ||
行 507: | 行 530: | ||
function HTML_Escape( string $str ) | function HTML_Escape( string $str ) | ||
{ | { | ||
- | // return htmlentities( $str, ENT_QUOTES, C_CHARSET ); | ||
return htmlentities( $str, ENT_QUOTES, " | return htmlentities( $str, ENT_QUOTES, " | ||
} | } | ||
行 518: | 行 540: | ||
function FORM_Escape( string $str ) | function FORM_Escape( string $str ) | ||
{ | { | ||
- | // return htmlspecialchars( $str, ENT_QUOTES, C_CHARSET ); | ||
return htmlspecialchars( $str, ENT_QUOTES, " | return htmlspecialchars( $str, ENT_QUOTES, " | ||
} | } | ||
行 527: | 行 548: | ||
function HTML_Begin() | function HTML_Begin() | ||
{ | { | ||
- | header(' | + | header(' |
print <<< | print <<< | ||
< | < | ||
行 559: | 行 580: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | \\ | ||