Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将导出到mysql更改为php中的文件?_Php_Mysql_Sql_Transbase - Fatal编程技术网

如何将导出到mysql更改为php中的文件?

如何将导出到mysql更改为php中的文件?,php,mysql,sql,transbase,Php,Mysql,Sql,Transbase,现在我有了这样的方法: 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

现在我有了这样的方法:

 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时速度非常慢。我决定将其更改为导出到file.sql,以便将来可以通过terminal或phpmyadmin导入该表。如何更改为将我的数据导出到sql文件

注意!我正在从transbase转换到mysql

请看这篇文章:

它使用
select-into-outfile
语法。此语法的文档如下所示:

您可以这样做:

<?php
    exec('mysqldump db_name '.$table_name.' > my_file.sql');
?>
mysql\u查询('SELECT*INTO OUTFILE)/path/to/my\u file/my\u file.sql“from.$table\u name)

然后,此.sql文件将位于您的服务器上

如果您没有运行
的权限,请选择进入outfile
synatx。您可以使用
mysqldump
实用程序,如下所示:

<?php
    exec('mysqldump db_name '.$table_name.' > my_file.sql');
?>

这将创建一个名为指示的.sql文件。

而不是

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");
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");
 }

OUTFILE
需要一些特权和服务器配置(只是说,它是一个很好的工具)!我的mysql数据库必须是空的,忘了mysql吧,php必须通过odbc直接导出到sql,而不是通过mysql查询除了Hakre的评论-大多数情况下,如果你没有远程sql客户端访问数据库,你就不会有perm来做
OUTFILE
。谢谢大家的更新,我通常在我是root的服务器上管理php/mysql,所以权限不是问题。我会看看我能想出什么…你不能站出来。我的mysql一定是空的!从ts db直接到文件sql!设置时间限制(3600);//此项不应在此处取消设置($keys);//这是多余的未设置($values);//这是未设置的($行);//当我删除它时,它也是惰性的,只有一行。另外警告:fputs()希望参数1是resource,null,因为错误消息的原因应该非常明显。是的,如果继续使用阵列,则确实需要重置阵列。如果你想让我编写无bug、经过测试的代码,那么我需要开始向你收费。