投稿者: shirane 日付: 2010-12-23 (木) 18:54
mysqldump の代わりに使える PHP スクリプトが必要になり、探してみると下記ページを発見:
http://snipplr.com/view/173/mysql-dump/
試してみると、残念ながら(自分の目的には)そのままでは使えなかった。
主キーが複数あるテーブルの CREATE TABLE で PRIMARY KEY が正しく出力されないとか、null 値が空の文字列として INSERT されてしまうとか。
やむなく、最近老眼が入ってきた目を凝らしてコードを読み、少しだけ手を入れた。
header('Content-Type: application/octet-stream'); function nullcheck($values) { $ret = Array(); foreach($values as $val) { if ($val===NULL) $ret[] = 'NULL'; else $ret[] = '\'' . $val . '\''; } return $ret; } function mysql_dump($database) { $lnbr = "\r\n"; $query = ''; $tables = @mysql_list_tables($database); while ($row = @mysql_fetch_row($tables)) { $table_list[] = $row[0]; } for ($i = 0; $i < @count($table_list); $i++) { $results = mysql_query('SHOW CREATE TABLE ' . $database . '.' . $table_list[$i]); $query .= 'DROP TABLE IF EXISTS `' . $table_list[$i] . '`;' . str_repeat($lnbr, 2); while ($row = @mysql_fetch_assoc($results)) { $query .= $row['Create Table'] . ';'; } $query .= str_repeat($lnbr, 2); $results = mysql_query('SELECT * FROM ' . $database . '.' . $table_list[$i]); while ($row = @mysql_fetch_assoc($results)) { $query .= 'INSERT INTO `' . $table_list[$i] .'` ('; $data = Array(); while (list($key, $value) = @each($row)) { $data['keys'][] = $key; $data['values'][] = ($value===NULL) ? NULL : addslashes($value); } $query .= join($data['keys'], ', ') . ')' . $lnbr . 'VALUES (' . str_replace("\r\n",'\r\n', join(nullcheck($data['values']), ', ')) . ');' . $lnbr; } $query .= str_repeat($lnbr, 2); } return $query; } $db = mysql_connect("db_host", "db_user", "db_pass"); if (!$db) { die('failed to open the database'); } echo mysql_dump("db_name"); mysql_close($db);
保存したファイルを phpmyadmin でインポートして無事目的を果たした。
(MySQL、PHP ともバージョンは 5)
#使いきりスクリプトにて他所で使ってどうなっても知りません。