SQLの窓

2015年08月04日


PHP : WrodPress のデータを insert SQL で保存する処理

前回の Excel とは違い、SQL のクォートがシングルクォーテ−ションなので、データ中の '(シングルクォーテ−ション) は ''(シングルクォーテ−ション2個) に変換しています。キャラクタセットも本来の utf8 を指定していますがこれは省略してもいいでしょう。

実際にローカルの MySQL に wp_posts を作成して 作成された insert 文を2つ実行してみましたが、エラー無く登録されました。
<?php
// **************************************
// MIME と キャラクタセットを設定
// **************************************
header( "Content-Type: text/html; Charset=utf-8" );

// **************************************
// キャッシュを無効にするヘッダ
// **************************************
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

// **************************************
// グローバル変数
// **************************************
$server = 'データベースサーバー';
$db_name = 'データーベース';
$user = 'ユーザー';
$password = 'パスワード';

print "処理開始<br>";
// **************************************
// データベース接続
// **************************************
$connect = @ new mysqli($server, $user, $password, $db_name);
if ($connect->connect_error) {
	die('Connect Error (' . $connect->connect_errno . ') '
	. $connect->connect_error);
}

// **************************************
// クライアントのキャラクタセット
// **************************************
$connect->set_charset("utf8");

// **************************************
// WordPress の投稿データ
// **************************************
$query = "select * from wp_posts";
// クエリ
$result = $connect->query($query); 
if ( !$result ) {
	die('クエリーに誤りがあります : ' . $connect->error );
}

// **************************************
// 列名とデータ型を取得
// **************************************
$finfo = $result->fetch_fields();

$name = array();
$type = array();
foreach ($finfo as $val) {
	$name[] = $val->name;
	$type[] = $val->type;
}

// **************************************
// フィールド数
// **************************************
$field_count = $connect->field_count;

$fld_list = "(" . implode(",",$name ) . ")";

$file = "";

while ($row = $result->fetch_array(MYSQLI_BOTH)) {

	// CSV の一行の作成
	$insert = "insert into wp_posts {$fld_list} values(";
	for( $i = 0; $i < $field_count; $i++ ) {
		if ( $i != 0 ) {
			$insert .= ",";
		}
		// 数値型
		// TIMESTAMP型(7) を使用している場合は変更が必要です
		if ( $type[$i] < 10 || $type[$i] == 246 || $type[$i] == 16 ) {
			if ( $row[$i] == "" ) {
				$insert .= "0";
			}
			else {
				$insert .= $row[$i];
			}
		}
		else {
			// データ内のダブルクォートとフィールドを囲むダブルクォート
			if ( $row[$i] == "" ) {
				$insert .= "''";
			}
			else {
				$insert .= "'" . str_replace("'", "''","$row[$i]") . "'";
			}
		}
	}

	// データ内の改行コード
	$insert = str_replace("\r\n", "\\r\\n", $insert);
	$insert = str_replace("\r", "\\r", $insert);
	$insert = str_replace("\n", "\\n", $insert);

	// insert としての一行を追加
	$file .= "{$insert});\r\n";

}

// **************************************
// ファイルに出力
// **************************************
file_put_contents("insert.sql", $file);

?>


関連する記事

参考

MySQL TIMESTAMP / MySQLTutorial



【PHP + データベースの最新記事】
posted by lightbox at 2015-08-04 20:30 | PHP + データベース | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり