connect_errno )
{
die($mysqli->connect_errno . ' : ' . $mysqli->connect_error);
}
// 文字セットの指定
if (isset($_REQUEST['s']))
{
$mysqli->query('SET NAMES utf8');
}
// レスポンス処理
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 )
{
if ( !$sql || $sql[0]=='#' ) $sql=''; // 先頭の#は改行
// SQL文表示
print HTML_Escape(strlen($sql)<80 ? $sql : substr($sql,0,80)." ...");
print "
\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]
\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 "
$key | \n"; } print "
---|
$value | \n"; } print "