如何使用php导入mysql数据库中的.sql文件
如何使用php导入mysql数据库中的.sql文件
我怎么能做到这一点,请帮助我解决这个问题,谢谢
此代码显示此错误..
There was an error during import. Please make sure the import file is saved in the same folder as this script and check your values: MySQL Database Name: test MySQL User Name: root MySQL Password: NOTSHOWN MySQL Host Name: localhost MySQL Import Filename: dbbackupmember.sql
我正在使用这个代码
<?php //ENTER THE RELEVANT INFO BELOW $mysqlDatabaseName ='test'; $mysqlUserName ='root'; $mysqlPassword =''; $mysqlHostName ='localhost'; $mysqlImportFilename ='dbbackupmember.sql'; //DONT EDIT BELOW THIS LINE //Export the database and output the status to the page $command='mysql -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .' < ' .$mysqlImportFilename; exec($command,$output=array(),$worked); switch($worked){ case 0: echo 'Import file <b>' .$mysqlImportFilename .'</b> successfully imported to database <b>' .$mysqlDatabaseName .'</b>'; break; case 1: echo 'There was an error during import. Please make sure the import file is saved in the same folder as this script and check your values:<br/><br/><table><tr><td>MySQL Database Name:</td><td><b>' .$mysqlDatabaseName .'</b></td></tr><tr><td>MySQL User Name:</td><td><b>' .$mysqlUserName .'</b></td></tr><tr><td>MySQL Password:</td><td><b>NOTSHOWN</b></td></tr><tr><td>MySQL Host Name:</td><td><b>' .$mysqlHostName .'</b></td></tr><tr><td>MySQL Import Filename:</td><td><b>' .$mysqlImportFilename .'</b></td></tr></table>'; break; } ?>
我有另一种方法来做到这一点,试试这个
<?php // Name of the file $filename = 'churc.sql'; // MySQL host $mysql_host = 'localhost'; // MySQL username $mysql_username = 'root'; // MySQL password $mysql_password = ''; // Database name $mysql_database = 'dump'; // Connect to MySQL server mysql_connect($mysql_host, $mysql_username, $mysql_password) or die('Error connecting to MySQL server: ' . mysql_error()); // Select database mysql_select_db($mysql_database) or die('Error selecting MySQL database: ' . mysql_error()); // Temporary variable, used to store current query $templine = ''; // Read in entire file $lines = file($filename); // Loop through each line foreach ($lines as $line) { // Skip it if it's a comment if (substr($line, 0, 2) == '--' || $line == '') continue; // Add this line to the current segment $templine .= $line; // If it has a semicolon at the end, it's the end of the query if (substr(trim($line), -1, 1) == ';') { // Perform the query mysql_query($templine) or print('Error performing query \'<strong>' . $templine . '\': ' . mysql_error() . '<br /><br />'); // Reset temp variable to empty $templine = ''; } } echo "Tables imported successfully"; ?>
这对我来说是好运
从Raj的答案是有用的,但(由于文件($文件名))它将失败, 如果你的mysql转储不适合内存
如果您使用的是共享主机,并且存在30 MB和12S脚本运行时的限制 ,并且您必须恢复x00MB mysql转储 ,则可以使用以下脚本:
它将执行转储文件查询查询,如果脚本执行截止date接近,它将当前文件位置保存在一个tmp文件中,并且自动浏览器重新加载将一次又一次地继续这个过程。如果发生错误,重新加载将停止并显示错误…
如果你从午餐复出你的分贝将被恢复;-)
noLimitDumpRestore.php:
// your config $filename = 'yourGigaByteDump.sql'; $dbHost = 'localhost'; $dbUser = 'user'; $dbPass = '__pass__'; $dbName = 'dbname'; $maxRuntime = 8; // less then your max script execution limit $deadline = time()+$maxRuntime; $progressFilename = $filename.'_filepointer'; // tmp file for progress $errorFilename = $filename.'_error'; // tmp file for erro mysql_connect($dbHost, $dbUser, $dbPass) OR die('connecting to host: '.$dbHost.' failed: '.mysql_error()); mysql_select_db($dbName) OR die('select db: '.$dbName.' failed: '.mysql_error()); ($fp = fopen($filename, 'r')) OR die('failed to open file:'.$filename); // check for previous error if( file_exists($errorFilename) ){ die('<pre> previous error: '.file_get_contents($errorFilename)); } // activate automatic reload in browser echo '<html><head> <meta http-equiv="refresh" content="'.($maxRuntime+2).'"><pre>'; // go to previous file position $filePosition = 0; if( file_exists($progressFilename) ){ $filePosition = file_get_contents($progressFilename); fseek($fp, $filePosition); } $queryCount = 0; $query = ''; while( $deadline>time() AND ($line=fgets($fp, 1024000)) ){ if(substr($line,0,2)=='--' OR trim($line)=='' ){ continue; } $query .= $line; if( substr(trim($query),-1)==';' ){ if( !mysql_query($query) ){ $error = 'Error performing query \'<strong>' . $query . '\': ' . mysql_error(); file_put_contents($errorFilename, $error."\n"); exit; } $query = ''; file_put_contents($progressFilename, ftell($fp)); // save the current file position for $queryCount++; } } if( feof($fp) ){ echo 'dump successfully restored!'; }else{ echo ftell($fp).'/'.filesize($filename).' '.(round(ftell($fp)/filesize($filename), 2)*100).'%'."\n"; echo $queryCount.' queries processed! please reload or wait for automatic browser refresh!'; }
值得一提的是Adminer脚本。 这是一个单一文件中的数据库managemenet工具。
简单地通过FTP或其他方式将php文件拖放到您的服务器上,您可以使用完整的GUI来导入数据库,运行sql命令等等。
<?php $host = "localhost"; $uname = "root"; $pass = ""; $database = "demo1"; //Change Your Database Name $conn = new mysqli($host, $uname, $pass, $database); $filename = 'users.sql'; //How to Create SQL File Step : url:http://localhost/phpmyadmin->detabase select->table select->Export(In Upper Toolbar)->Go:DOWNLOAD .SQL FILE $op_data = ''; $lines = file($filename); foreach ($lines as $line) { if (substr($line, 0, 2) == '--' || $line == '')//This IF Remove Comment Inside SQL FILE { continue; } $op_data .= $line; if (substr(trim($line), -1, 1) == ';')//Breack Line Upto ';' NEW QUERY { $conn->query($op_data); $op_data = ''; } } echo "Table Created Inside " . $database . " Database......."; ?>
<?php system('mysql --user=USER --password=PASSWORD DATABASE< FOLDER/.sql'); ?>
我有testing你的代码,这个错误显示,当你已经有数据库导入或与一些名称相同的表,也显示数组错误是因为你添加在exec括号,这里是固定的版本:
<?php //ENTER THE RELEVANT INFO BELOW $mysqlDatabaseName ='test'; $mysqlUserName ='root'; $mysqlPassword =''; $mysqlHostName ='localhost'; $mysqlImportFilename ='dbbackupmember.sql'; //DONT EDIT BELOW THIS LINE //Export the database and output the status to the page $command='mysql -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .' < ' .$mysqlImportFilename; $output=array(); exec($command,$output,$worked); switch($worked){ case 0: echo 'Import file <b>' .$mysqlImportFilename .'</b> successfully imported to database <b>' .$mysqlDatabaseName .'</b>'; break; case 1: echo 'There was an error during import.'; break; } ?>
粮食脚本是一stream的,节省我的一天。 同时mysql被折旧了,我用PDO重写了Grain的答案。
$server = 'localhost'; $username = 'root'; $password = 'your password'; $database = 'sample_db'; /* PDO connection start */ $conn = new PDO("mysql:host=$server; dbname=$database", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->exec("SET CHARACTER SET utf8"); /* PDO connection end */ // your config $filename = 'yourFile.sql'; $maxRuntime = 8; // less then your max script execution limit $deadline = time()+$maxRuntime; $progressFilename = $filename.'_filepointer'; // tmp file for progress $errorFilename = $filename.'_error'; // tmp file for erro ($fp = fopen($filename, 'r')) OR die('failed to open file:'.$filename); // check for previous error if( file_exists($errorFilename) ){ die('<pre> previous error: '.file_get_contents($errorFilename)); } // activate automatic reload in browser echo '<html><head> <meta http-equiv="refresh" content="'.($maxRuntime+2).'"><pre>'; // go to previous file position $filePosition = 0; if( file_exists($progressFilename) ){ $filePosition = file_get_contents($progressFilename); fseek($fp, $filePosition); } $queryCount = 0; $query = ''; while( $deadline>time() AND ($line=fgets($fp, 1024000)) ){ if(substr($line,0,2)=='--' OR trim($line)=='' ){ continue; } $query .= $line; if( substr(trim($query),-1)==';' ){ $igweze_prep= $conn->prepare($query); if(!($igweze_prep->execute())){ $error = 'Error performing query \'<strong>' . $query . '\': ' . print_r($conn->errorInfo()); file_put_contents($errorFilename, $error."\n"); exit; } $query = ''; file_put_contents($progressFilename, ftell($fp)); // save the current file position for $queryCount++; } } if( feof($fp) ){ echo 'dump successfully restored!'; }else{ echo ftell($fp).'/'.filesize($filename).' '.(round(ftell($fp)/filesize($filename), 2)*100).'%'."\n"; echo $queryCount.' queries processed! please reload or wait for automatic browser refresh!'; }
// Import data $filename = 'database_file_name.sql'; import_tables('localhost','root','','database_name',$filename); function import_tables($host,$uname,$pass,$database, $filename,$tables = '*'){ $connection = mysqli_connect($host,$uname,$pass) or die("Database Connection Failed"); $selectdb = mysqli_select_db($connection, $database) or die("Database could not be selected"); $templine = ''; $lines = file($filename); // Read entire file foreach ($lines as $line){ // Skip it if it's a comment if (substr($line, 0, 2) == '--' || $line == '' || substr($line, 0, 2) == '/*' ) continue; // Add this line to the current segment $templine .= $line; // If it has a semicolon at the end, it's the end of the query if (substr(trim($line), -1, 1) == ';') { mysqli_query($connection, $templine) or print('Error performing query \'<strong>' . $templine . '\': ' . mysqli_error($connection) . '<br /><br />'); $templine = ''; } } echo "Tables imported successfully"; } // Backup database from php script backup_tables('hostname','UserName','pass','databses_name'); function backup_tables($host,$user,$pass,$name,$tables = '*'){ $link = mysqli_connect($host,$user,$pass); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } mysqli_select_db($link,$name); //get all of the tables if($tables == '*'){ $tables = array(); $result = mysqli_query($link,'SHOW TABLES'); while($row = mysqli_fetch_row($result)) { $tables[] = $row[0]; } }else{ $tables = is_array($tables) ? $tables : explode(',',$tables); } $return = ''; foreach($tables as $table) { $result = mysqli_query($link,'SELECT * FROM '.$table); $num_fields = mysqli_num_fields($result); $row_query = mysqli_query($link,'SHOW CREATE TABLE '.$table); $row2 = mysqli_fetch_row($row_query); $return.= "\n\n".$row2[1].";\n\n"; for ($i = 0; $i < $num_fields; $i++) { while($row = mysqli_fetch_row($result)) { $return.= 'INSERT INTO '.$table.' VALUES('; for($j=0; $j < $num_fields; $j++) { $row[$j] = addslashes($row[$j]); $row[$j] = str_replace("\n", '\n', $row[$j]); if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } if ($j < ($num_fields-1)) { $return.= ','; } } $return.= ");\n"; } } $return.="\n\n\n"; } //save file $handle = fopen('backup-'.date("d_m_Y__h_i_s_A").'-'.(md5(implode(',',$tables))).'.sql','w+'); fwrite($handle,$return); fclose($handle); }
解决特殊的字符
$link=mysql_connect($dbHost, $dbUser, $dbPass) OR die('connecting to host: '.$dbHost.' failed: '.mysql_error()); mysql_select_db($dbName) OR die('select db: '.$dbName.' failed: '.mysql_error()); //charset important mysql_set_charset('utf8',$link);
我使用这个代码和运行成功:
$filename = 'apptoko-2016-12-23.sql'; //change to ur .sql file $handle = fopen($filename, "r+"); $contents = fread($handle, filesize($filename)); $sql = explode(";",$contents);// foreach($sql as $query){ $result=mysql_query($query); if ($result){ echo '<tr><td><BR></td></tr>'; echo '<tr><td>' . $query . ' <b>SUCCESS</b></td></tr>'; echo '<tr><td><BR></td></tr>'; } } fclose($handle);