现在我有这样的方法:
function exportFromTransbase($table_name) {
$odbc_query = "SELECT * FROM " . $table_name;
$data = odbc_exec($this->odbc_id, $odbc_query);
odbc_longreadlen($data, 10485760);
while($row = odbc_fetch_array($data))
{
foreach($row as $key => $value) {
$keys[] = "`" . $key . "`";
$values[] = "'" . mysql_real_escape_string($value) . "'";
}
$mysql_query = "INSERT INTO `" . strtolower(substr($table_name, 4)) . "` (" . implode(",", $keys) . ") VALUES (" . implode(",", $values) . ")";
mysql_query($mysql_query);
set_time_limit(3600);
unset($keys);
unset($values);
unset($row);
}
if ($mysql_query){
print "Ýêñïîðò äàííûõ èç òàáëèöû " . $table_name . " çàâåðøåí!";
//strtolower(substr($table_name, 4))
}
}
但是导入mysql时速度很慢。我决定将此更改为导出到文件.sql,以便将来我可以通过终端或phpmyadmin导入该表。如何更改导出到sql文件我的数据?
请注意!我正在从transbase转换为mysql
答案 0 :(得分:0)
看到这篇文章:
Easy way to export a SQL table without access to the server or phpMyADMIN
它使用select into outfile
语法。此语法的文档位于:http://dev.mysql.com/doc/refman/5.1/en/select-into.html
mysql_query('SELECT * INTO OUTFILE "/path/to/my_file/my_file.sql" from '.$table_name)
然后这个.sql文件将在你的服务器上。
如果您无权运行select into outfile
synatx。您可以使用mysqldump
实用程序,如下所示:
<?php
exec('mysqldump db_name '.$table_name.' > my_file.sql');
?>
这将创建一个名称为.sql的.sql文件。
答案 1 :(得分:0)
而不是......
while($row = odbc_fetch_array($data))
{
foreach($row as $key => $value) {
$keys[] = "`" . $key . "`";
$values[] = "'" . mysql_real_escape_string($value) . "'";
}
$mysql_query = "INSERT INTO `" . strtolower(substr($table_name, 4)) . "` (" . implode(",", $keys) . ") VALUES (" . implode(",", $values) . ")";
mysql_query($mysql_query);
set_time_limit(3600); // this should not be here
unset($keys); // this is redundant
unset($values); // and this
unset($row); // and this too
}
尝试:
$oufile=fopen("export.sql", 'w') || die("error writing file");
while($row = odbc_fetch_array($data))
{
foreach($row as $key => $value) {
$keys[] = "`" . $key . "`";
$values[] = "'" . mysql_real_escape_string($value) . "'";
}
$mysql_query = "INSERT INTO `" . strtolower(substr($table_name, 4)) . "` (" . implode(",", $keys) . ") VALUES (" . implode(",", $values) . ")";
fputs($outfile, $mysql_query . ";\n";
}
然而,如果你......它会快得多......
$oufile=fopen("export.sql", 'w') || die("error writing file");
fputs($outfile, "ALTER TABLE `" . . strtolower(substr($table_name, 4)) . "` DISABLE KEYS;\n";
while($row = odbc_fetch_array($data))
{
foreach($row as $key => $value) {
$keys[] = "`" . $key . "`";
$values[] = "'" . mysql_real_escape_string($value) . "'";
}
$head="INSERT DELAYED INTO `" . strtolower(substr($table_name, 4)) . "` (" . implode(",", $keys) . ") VALUES ";
$row[]="(" . implode(",", $values) . ")";
if (count($row)>100) {
flush_ins($outfile, $head, $row);
$row=array();
}
}
if (count($row)) flush_ins($outfile, $head, $row);
fputs($outfile, "ALTER TABLE `" . . strtolower(substr($table_name, 4)) . "` ENABLE KEYS;\n";
fclose($outfile);
...
function flush($rows, $head, $fh)
{
fputs($fh, $head . implode("\n,", $rows) . ";\n");
}