Ground Sunlight

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

ユーザ用ツール

サイト用ツール


サイドバー

メインメニュー

XAMPP アレンジ

IED

WSL2

道具箱

リポジトリ編

フレームワーク編

公開ソフトウェア

メタ
リンク


このページへのアクセス
今日: 3 / 昨日: 4
総計: 3806

mariadb:10.4:mysqli

文書の過去の版を表示しています。


本編は投稿中です。しばらくお待ち下さい。

MariaDB10.4 PHPサンプルプログラム 

y2sunlight 2019-10-10

MariaDBに戻る

関連記事


ここでは、MySQLの動作を理解するために、サンプルプログラム sqlfile.php を作成します。このプログラムは次章以降で利用します。

サンプルプログラムでは MySQLi を使用します。MySQLiは、MySQL(またはMariaDB)データベースとの接続を行うPHP拡張モジュールで、前章で説明した phpMyAdmin でも使用されています。

参考リンク

mysqli クラスの使い方

ここでは、サンプルプログラム sqlfile.php で使用するmysqli クラス(及びmysqli_resultクラス)について簡単に紹介します。

mysqli::__construct

mysqliオブジェクトを作る 詳細

mysqli::__construct (
  [ string $host     = ini_get("mysqli.default_host")
  [,string $username = ini_get("mysqli.default_user")
  [,string $passwd   = ini_get("mysqli.default_pw")
  [,string $dbname   = ""
  [,int    $port     = ini_get("mysqli.default_port")
  [,string $socket   = ini_get("mysqli.default_socket")
  ]]]]]])

mysqli::connect

MySQLサーバーの接続 詳細

mysqli::connect (
  [ string $host = ini_get("mysqli.default_host")
  [,string $username = ini_get("mysqli.default_user")
  [,string $passwd = ini_get("mysqli.default_pw")
  [,string $dbname = ""
  [,int $port = ini_get("mysqli.default_port")
  [,string $socket = ini_get("mysqli.default_socket")
  ]]]]]]) : void

mysqli::close

MySQLサーバーの切断 詳細

mysqli::close ( void ) : bool

mysqli::query

クエリを実行する 詳細

mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed

mysqli_result::fetch_all

クエリ結果の全行を取得する 詳細

mysqli_result::fetch_all ([ int $resulttype = MYSQLI_NUM ] ) : mixed

データベースとの接続

sample1.php
<?php
$host = 'localhost';
$user_name = 'sunlight';
$password = 'sunlight';
$database_name = 'sunlight_db';
$port = 3306;
 
// データベースへ接続
$mysqli = @new mysqli( $host, $user_name, $password, $database_name, $port );
 
// 接続エラーの確認
if( $mysqli->connect_errno )
{
    die($mysqli->connect_errno . ' : ' . $mysqli->connect_error);
}
 
echo "Connected successfully : {$host}/{$database_name}";
 
// 接続解除
$mysqli->close();

テーブルの作成

sample2.php
<?php
$host = 'localhost';
$user_name = 'sunlight';
$password = 'sunlight';
$database_name = 'sunlight_db';
$port = 3306;
 
// データベースへ接続
$mysqli = @new mysqli( $host, $user_name, $password, $database_name, $port );
 
// 接続エラーの確認
if( $mysqli->connect_errno )
{
    die($mysqli->connect_errno . ' : ' . $mysqli->connect_error);
}
 
// テーブルを作成するSQLを作成
$sql = <<< EOF
CREATE TABLE syain (
  syain_no int NOT NULL AUTO_INCREMENT,
  syain_name varchar(50),
  syain_age int,
  PRIMARY KEY (syain_no)
)
EOF;
 
// SQL実行
if ($mysqli->query($sql)===FALSE)
{
    echo('Query Error: ' . $mysqli->error);
}
 
echo "Created Table successfully : {$host}/{$database_name}";
 
// 接続解除
$mysqli->close();

データの更新

sample3.php
<?php
$host = 'localhost';
$user_name = 'sunlight';
$password = 'sunlight';
$database_name = 'sunlight_db';
$port = 3306;
 
// データベースへ接続
$mysqli = @new mysqli( $host, $user_name, $password, $database_name, $port );
 
// 接続エラーの確認
if( $mysqli->connect_errno )
{
    die($mysqli->connect_errno . ' : ' . $mysqli->connect_error);
}
 
// 挿入
$sql = "INSERT INTO syain(syain_name, syain_age) VALUES('Suzuki',50),('Yamamoto',30)";
exec_sql($mysqli, $sql);
 
// 更新
$sql = "UPDATE syain SET syain_age = syain_age + 1";
exec_sql($mysqli, $sql);
 
// 削除
$sql = "DELETE FROM syain WHERE syain_age > 50";
exec_sql($mysqli, $sql);
 
// 接続解除
$mysqli->close();
 
/**
 * クエリSQLの実行
 * @param mysqli $mysqli
 * @param string $sql
 * @return mysqli_result|boolean
 */
function exec_sql(mysqli $mysqli, string $sql)
{
    echo "{$sql}<br>";
 
    if (($ret = $mysqli->query($sql))===FALSE)
    {
        echo("Query Error: {$mysqli->error}<br><br>");
    }
    else
    {
        echo "Query successfully<br><br>";
    }
    return $ret;
}

データの検索

sample4.php
<?php
$host = 'localhost';
$user_name = 'sunlight';
$password = 'sunlight';
$database_name = 'sunlight_db';
$port = 3306;
 
// データベースへ接続
$mysqli = @new mysqli( $host, $user_name, $password, $database_name, $port );
 
// 接続エラーの確認
if( $mysqli->connect_errno )
{
    die($mysqli->connect_errno . ' : ' . $mysqli->connect_error);
}
 
// 検索
$sql = "SELECT * FROM syain;";
exec_sql($mysqli, $sql);
 
// 接続解除
$mysqli->close();
 
/**
 * クエリSQLの実行
 * @param mysqli $mysqli
 * @param string $sql
 * @return mysqli_result|boolean
 */
function exec_sql(mysqli $mysqli, string $sql)
{
    echo "{$sql}<br>";
 
    if (($ret = $mysqli->query($sql))===FALSE)
    {
        echo("Query Error: {$mysqli->error}<br><br>");
    }
    else if ($ret===TRUE)
    {
        echo "Query successfully<br><br>";
    }
    else
    {
        $result = $ret->fetch_all(MYSQLI_ASSOC);
        var_dump($result);
    }
    return $ret;
}

サンプルプログラム

サンプルプログラム( sqlfile.php )の仕様

  • プログラムはSQLスクリプトファイル(テキストファイル)を読み込みます。
  • SQLスクリプトファイルにはSQL文、EVAL文、コメントを含みます。
    文は;で区切り、コメントは#で始まります。
  • SQL文がSELECT文( またはSHOW文 )の場合は検索結果を表示し、非SELECT文の場合はSQLの実行のみ行います。
  • EVAL文はPHPのeval関数で実行します。但し複文の実行はできません。またクォート処理をしていないので、EVAL echo 'Hellow;'; などは途中で文が区切られエラーになります。
    例えば:EVAL sleep(1);
  • 検索結果及び実行結果はHTMLで出力します。
  • SQLスクリプトファイルはURLのクエリ文字列で指定します。
    例えば:http://localhost/mysql/sqlfile.php?f=sample.sql

サンプルプログラムを使った例

ブラウザからサンプルプログラム(sqlfile.cgi)を実行します。

http://localhost/mysql/sqlfile.php?f=sample.sql
sample.sql
# テーブル作成
DROP TABLE IF EXISTS syain;
CREATE TABLE syain (
  syain_no INT(10) NOT NULL,
  syain_name VARCHAR(50),
  bumon_no INT(10),
  PRIMARY KEY (syain_no)
);
 
# テーブルにデータを挿入
INSERT INTO syain VALUES(1,'Suzuki',3);
INSERT INTO syain VALUES(2,'Yamamoto',1);
INSERT INTO syain VALUES(3,'Tanaka',2);
 
# テーブルの検索
SELECT * FROM syain;

実行結果

=== サンプルプログラム( sqlfile.cgi )のソース === <file php sqlfile.php> <?php / * Configuration */ データベース接続先 define(“HOST”, “localhost”); ホスト名 define(“USER_NAME”, “sunlight”); ユーザ名 define(“PASSWORD”, “sunlight”); パスワード define(“DATABASE_NAME”, “sunlight_db”); データベース名 define(“PORT”, 3306); ポート SQLファイルの保存先 define(“SQL_PATH”, dirname(FILE) . “/sql”); / * Main */ SQスクリプト取得 if (isset($_REQUEST['f'])) { $sql_text = ReadScriptFile(SQL_PATH . “/{$_REQUEST['f']}”); $sql_array = GetSqlText($sql_text); } else { die('Illegal call'); } データベースへの接続 $mysqli = @new mysqli( HOST, USER_NAME, PASSWORD, DATABASE_NAME, PORT ); if( $mysqli→connect_errno ) { die($mysqli→connect_errno . ' : ' . $mysqli→connect_error); } レスポンス処理 HTML_Begin(); DoSqlScript( $mysqli, $sql_array ); HTML_End(); データベースの切断 $mysqli→close(); / * SQLスクリプトの実行 * @param mysqli $mysqli MySQLiオブジェクト * @param string[] $sql_text SQL文の配列 */ function DoSqlScript( mysqli $mysqli, array $sql_text ) { if (empty($sql_text)) return; $sqltime = 0; foreach( $sql_text as $sql ) { SQL文表示 print HTML_Escape(strlen($sql)<60 ? $sql : substr($sql,0,60).“ …”); print “<br />\n”; ob_flush(); flush(); if ( !$sql ) continue; # 空行 特別なEVAL文の実行 if ( preg_match( “/^eval\s+(.+)/i”, $sql, $reg ) ) { eval(“{$reg[1]};”); continue; } SELECT文と非SELECT文で処理を分ける $time1 = microtime_as_float(); if (preg_match(“/^(select|show)\s/i”, $sql)) { if (!DoSelect($mysqli, $sql)) break; } else { $res = $mysqli→query($sql); if($res===false) { SqlError(“DoSqlScript”, $mysqli→error); break; } } $time2 = microtime_as_float(); $sqltime += ($time2-$time1); ob_flush(); flush(); } print “exec time: ”.sprintf('%01.03f', $sqltime).“ [sec]<br />\n”; } / * SELECT文の実行 * @param mysqli $mysqli MySQLiオブジェクト * @param string $sql SQL文 * @return boolean 成功でTrueを返す */ function DoSelect( mysqli $mysqli, string $sql ) { 検索実行

  $res = $mysqli->query($sql);
  if($res===false)
  {
      SqlError("DoSelect", $mysqli->error);
      return false;
  }
  // カラム名の表示
  if ($rows = $res->fetch_all(MYSQLI_ASSOC))
  {
      print "<table>\n";
      print "<tr>\n";
      foreach( $rows[0] as $key => $value )
      {
          print "<th>$key</th>\n";
      }
      print "</tr>\n";
  }
  else
  {
      print "No results found.<br />\n";
      return true;
  }
  // 行の表示
  foreach( $rows as $row )
  {
      print "<tr>\n";
      foreach( $row as $value )
      {
          $value = HTML_Escape($value);
          print "<td>$value</td>\n";
      }
      print "</tr>\n";
  }
  print "</table><br />\n";
  return true;

}

/ * SQLテキストの取得 * @param string $text SQLテキスト * @return string[] SQL文の配列 */ function GetSqlText( string $text ) { $sql_text = array(); $delimiters = “\r\n”; $sql = ; $line = strtok($text, $delimiters); while ($line !== false) { コメントと前後の空白を除去 $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; } / * SQLスクリプトファイルの読み込み * @param string $sql_file ファイル名 * @return string SQLテキスト */ function ReadScriptFile( string $sql_file ) { if (!preg_match(“/^[^\.].*\.sql/”,$sql_file)) { SqlError(“URL”,“Illegal script file name.”); } if1)===false) { SqlError(“open”,“Can't file open $sql_file.”); } return $text; } / * マイクロ秒取得 * @return float */ function microtime_as_float() { list($usec, $sec) = explode(' ', microtime()); return ((float)$sec + (float)$usec); } / * HTML エスケープ * @param string $str * @return string */ function HTML_Escape( string $str ) { return htmlentities( $str, ENT_QUOTES, C_CHARSET ); return htmlentities( $str, ENT_QUOTES, “utf-8” ); } / * HTML エスケープ(FORM用) * @param string $str * @return string */ function FORM_Escape( string $str ) { return htmlspecialchars( $str, ENT_QUOTES, C_CHARSET ); return htmlspecialchars( $str, ENT_QUOTES, “utf-8” ); } / * HTMLの開始処理 */ function HTML_Begin() { header('Content-type: text/html; charset=uft8'); print «<EOF <html> <head> <style type=“text/css”> body {font:10pt monospace;} table {font:10pt monospace;border-collapse:collapse;} th,td {border:solid 1px #000000;} th {background-color:#eeeeee;} </style> </head> <body>\n EOF; } / * HTMLの終了処理 */ function HTML_End(){ print “</body></html>\n”; } /** * エラーメッセージ表示 * @param string $title タイトル * @param string $msg メッセージ */ function SqlError($title, $msg) { print “[Error]$title: $msg<br />\n”; } </file>

1)
$text=@file_get_contents($sql_file

コメント

test27.153.185.39, 2022/11/04 17:14

https://www.pandorasjewelrys.us.com/ https://www.pandorabraceletscharms.us.com/ https://www.asicsoutletshoes.us.com/ https://www.outletmonclerjackets.us.com/ https://www.wholesalejordanshoes.us.org/ https://www.airjordans1.us.com/ https://www.wholesalejordanshoes.us/ https://www.nikeoutletstore-onlineshopping.us.com/ https://www.pandorascom.us.com/ https://www.pandora-store.us.com/ https://www.nikeoutletstoreonlineshopping.us.com/ https://www.airjordan1low.us/ https://www.pandorastores.us.com/ https://www.shoesasicsoutlet.us.com/ https://www.pandorass.us/ https://www.jordan1high.us/ https://www.adidasshoesmen.us.com/ https://www.asicssneakers.us.com/ https://www.cheapmoncler.us.com/ https://www.monclerscoats.us.com/ https://www.bestbasketballshoes.us/ https://www.pandorasjewelry-officialsite.us.com/ https://www.nikemensshoes.us.com/ https://www.nikestorefactorys.us.com/ https://www.newshoes2021.us/ https://www.wholesaleairjordanscheap.us/ https://www.asicsgel-kayano.us.com/ https://www.pandorajewelrysofficialsite.us.com/ https://www.pandorajewelrysbracelets.us.com/ https://www.airmax270.us.com/ https://www.jewelryspandora.us/ https://www.balenciagastores.us.com/ https://www.adidas-runningshoes.us.com/ https://www.jordanshop.com.co/ https://www.nikerunningshoessale.us.com/ https://www.airjordan1s.us.com/ https://www.jordans1retro.us.com/ https://www.outletstoreonlineshopping.com.co/ https://www.adidasofficialwebsite.us.com/ https://www.monclersaleoutlets.us.com/ https://www.asicsrunningshoess.us.com/ https://www.balenciagatriplessneakers.us.com/ https://www.pandorabraceletsjewelry.us.com/ https://www.ferragamocom.us/ https://www.pandora-outletcharms.us.com/ https://www.pandoracharmsofficial.us.com/ https://www.airmax720.us.com/ https://www.nikecom.ca/ https://www.max97.uk.com/ https://www.pandoras-outlet.us.com/ https://www.nikeshoesnew.us.com/ https://www.yeezyshoes.com.co/ https://www.pandoraoutletsonline.us.com/ https://www.nikeairmax2021.us.com/ https://www.asicsshoess.us.com/ https://www.nikecanadaonlines.ca/ https://www.goyardbagsoutlet.us.com/ https://www.nikeshoes-formen.us.com/ https://www.nikesneakersforwomen.us.com/ https://www.pandorasjewellery.us.com/ https://www.nikesnkrs.ca/ https://www.adidasshoescheap.us.com/ https://www.nikesairjordans.us.com/ https://www.ferragamosbelts.us.com/ https://www.airjordan1.us.org/ https://www.pandorasjewelrysite.us.com/ https://www.pandorashop.us.com/ https://www.outletasics.us.com/ https://www.airjordanssneakers.us.com/ https://www.nikestoreoutlets.us.com/ https://www.pandoraoutlet-charms.us.com/ https://www.pandorajewelry-officialsites.us/ https://www.pandoracharmsstore.us.com/ https://www.jordan1shoes.us.com/ https://www.pandoraoutletscharms.us.com/ https://www.balenciagasneakerssales.us.com/ https://www.nikecanadaonlineshopping.ca/ https://www.airjordan1retro.us.com/ https://www.pandorasstore.us.com/ https://www.pandorasjewelryofficialsite.us.com/ https://www.pandorajewelrybracelets.us.com/ https://www.pandoraofficialsite.us.com/ https://www.monclerjacketsoutletonline.us.com/ https://www.officialmonclers.us.com/ https://www.nmd.us.com/ https://www.pandoraringsjewelry.us.com/ https://www.monclercoatsjacketsoutlet.us.com/ https://www.pandorajewelryshop.us.com/ https://www.monclerstoreoutlets.us.com/ https://www.pandoracharms-bracelets.us/ https://www.pandorasbraceletcharms.us.com/ https://www.cheapjordanshoeswholesale.us/ https://www.pandoraoutletjewelry.us.com/ https://www.jordanones.us/ https://www.balenciagastore.us.com/ https://www.trainersshop.uk.com/ https://www.airjordans1retro.us.com/ https://www.pandoraoutlet-online.us.com/ https://www.jordan1retro.us.com/ https://www.salvatoreferragamos.us.com/ https://www.jordanretro1.us.com/ https://www.outletsmonclerjackets.us.com/ https://www.pandora-jewelryoutlets.us.com/ https://www.jordanstore.com.co/ https://www.pandorajewelrysblackfriday.us.com/ https://www.airjordan5.us.com/ https://www.pandorajewelryoff.us.com/ https://www.adidasstoreoutlets.us.com/ https://www.pandorasrings.us.com/ https://www.adidasshoes-canada.ca/ https://www.pandorashops.us.com/ https://www.pandorascanadajewelry.ca/ https://www.pandorasofficialsite.us.com/ https://www.pandoracharmss.us.com/ https://www.nikeshoes-forwomen.us.com/ https://www.nikeairjordan1.us.com/ https://www.adidasshoeswomen.us.com/ https://www.pandorajewelrywebsites.us.com/ https://www.diorjordan1.us.com/ https://www.adidassale.us.com/ https://www.pandorashops.us/ https://www.pandorabraceletsclearance.us.com/ https://www.pandoracharms-bracelets.us.com/ https://www.pandoraoutletscharms.us/ https://www.pandorajewelrywebsite.us.com/ https://www.cheapshoesoutletonlines.us/ https://www.sneakersadidas.us.com/ https://www.pandora-jewellery.us.com/ https://www.pandorasbracelets.us.com/ https://www.jordan1low.us.com/ https://www.trainersforsale.uk.com/ https://www.pandoracharmsjewelrys.us/ https://www.shoesferragamo.us.com/ https://www.ferragamosbelt.us.com/ https://www.pandoraofficialsites.us.com/ https://www.charmspandoras.us/ https://www.yeezysshoes.ca/ https://www.nikeshoeswomen.us.com/ https://www.officialpandorajewelry.ca/ https://www.pandorasjewelryoff.us.com/ https://www.nike--shoes.ca/ https://www.cheapmoncler.com.co/ https://www.nikesneakersformen.us.com/ https://www.pandorasjewelrycharms.us.com/ https://www.adidass.ca/ https://www.balenciagashoess.us.com/ https://www.pandorasoutlet.us.com/ https://www.pandora-charmssaleclearance.us/ https://www.monclercoatfactory.us.com/ https://www.pumashoess.us.com/ https://www.balenciagashoesstore.us.com/ https://www.goyardhandbagsoutlet.us.com/ https://www.balenciagasneakersoutlet.us.com/ https://www.nikesstore.us.com/ https://www.monclerjacket.com.co/ https://www.pandoras-charms.us.com/ https://www.airjordan1shoes.us.com/

コメントを入力. Wiki文法が有効です:
 
mariadb/10.4/mysqli.1571297971.txt.gz · 最終更新: 2019/10/17 16:39 by y2sunlight