Восстановление резервной копии таблицы в sql и php
<?php
$dbhost = 'XXXXXXX';
$dbuser = 'XXXXXXX';
$dbpass = 'XXXXXXX';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$table_name = "chofer";
$backup_file = "chofer.sql";
$sql = "LOAD DATA INFILE '$backup_file' INTO TABLE $table_name";
mysqli_select_db($conn,'test_db');
$retval = mysqli_query($conn, $sql);
if(! $retval ) {
die('No se puede acceder al registro : ' . mysql_error());
}
echo "<script>";
echo "alert ('Restauración exitosa.');";
echo "window.location.replace('index.php');";
echo "</script>";
mysqli_close($conn);
?>
с помощью этого скрипта вы должны восстановить таблицу chofer с информацией о файле chofer.sql, но отметьте эту ошибку "невозможно получить доступ к реестру" и не восстановите таблицу, теперь идея состоит в том, что вы спрашиваете, какой файл вы хотите восстановить, и также восстановите все таблицы, содержащиеся в файле .sql, надеюсь, вы можете помочь мне с этой дилеммой, большое спасибо.
это файл, с которым я поддерживаю таблицы
<?php
backup_tables('XXXXXXX','XXXXXXX','XXXXXXX','XXXXXXX');
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
$link = mysqli_connect($host,$user,$pass);
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);
}
//cycle through
foreach($tables as $table)
{
$result = mysqli_query($link,'SELECT * FROM '.$table);
$num_fields = mysqli_num_fields($result);
$return.= 'DROP TABLE '.$table.';';
$row2 = mysqli_fetch_row(mysqli_query($link,'SHOW CREATE TABLE '.$table));
$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('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
fwrite($handle,$return);
fclose($handle);
}
?>
1 answers
Вы хотите запустить SQL-скрипт из php.
Перед кодом решения я обязан рекомендовать не разрешать любому пользователю выполнять произвольный SQL на вашем сервере, потому что это открывает дверь для умеренно способного пользователя, чтобы уничтожить данные и их структуры.
Тем не менее, и после того, как вы увидели процедуру, которая генерирует backup, у вас есть SQL-скрипт, содержащий несколько операторов (один чтобы удалить таблицу, другую, чтобы создать ее снова, и несколько insert
строк данных).
Использует функцию mysqli_multi_query для выполнения всего содержимого скрипта SQL
за один вызов. Следуя строкам вашего примера, это будет что-то вроде:
<?php
$dbhost = 'XXXXXXX';
$dbuser = 'XXXXXXX';
$dbpass = 'XXXXXXX';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$backup_file = "/path/to/chofer.sql";
$sql = file_get_contents($backup_file);
mysqli_select_db($conn,'test_db');
if (mysqli_multi_query($conn, $sql)) {
do {
/* almacenar primer juego de resultados */
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* mostrar divisor */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (mysqli_next_result($link));
}
echo "<script>";
echo "alert ('Restauración exitosa.');";
echo "window.location.replace('index.php');";
echo "</script>";
mysqli_close($conn);
?>
Код, вероятно, имеет некоторую синтаксическую ошибку, идея состоит в том, что вы обращаетесь к нему и создаете свое собственное решение.