Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Backup bazy danych
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam wszystkich.

Ostatnio zainteresowałem się tworzeniem backupu bazy danych przez WWW. I wszystko pięknie, ładnie, skorzystałem z mysqldump i stworzył mi się plik z bazą.
Problem powstał, kiedy chciałem ten plik tak jakby zaimportować przez WWW. Gdy wrzucam wszystko w jedno zapytanie otrzymuje komunikat:

Kod
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_CO' at line 8
i nie bardzo rozumiem co mu się nie podoba w pliku który sam stworzył.

Mógłbym prosić o wyjaśnienie i ewentualną pomoc z rozwiązaniem problemu?

Z góry dziękuje smile.gif
nospor
mysqldum tworzy ci plik z serią zapytan. Nie mozesz potem tego wszystkiego wrzucic w mysql_query, gdyz mysql_query przyjmuje tylko jedno zapytanie naraz a nie petryliard zapytan naraz. Kazde zapytanie ma byc wykonane oddzielnie
Xart
Proszę daję srypt na backup bazy przez WWW

  1. <?php
  2. try{
  3. ///parametry polaczenia z baza
  4. tutaj do łączenia dane
  5. ///stworzenie nowego obiektu klasy PDO
  6. $PDO = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>
  7. "SET NAMES utf8"));
  8. $PDO -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  9. $sqlQuery = "SHOW tables FROM " . $dbName;
  10. $sqlResult = $PDO->query($sqlQuery);
  11. ///przypisanie naglowka do backupu
  12. $sqlData = "-- Cron Backup --
  13. SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";
  14. -- Baza: `$dbName`
  15. -- Cron Backup --\n\n";
  16. while ($queryTable = $sqlResult->fetch(PDO::FETCH_ASSOC)){
  17. $sqlTable = $queryTable['Tables_in_' . $dbName];
  18. $sqlQuery = "SHOW CREATE TABLE $sqlTable";
  19. $sqlResultB = $PDO->query($sqlQuery);
  20. $queryTableInfo = $sqlResultB->fetch(PDO::FETCH_ASSOC);
  21. ///dodanie naglowkow dla konkretnych tabel
  22. $sqlData .= "\n\n--
  23. -- Struktura dla tabeli `$sqlTable`
  24. --\n\n";
  25. $sqlData .= $queryTableInfo['Create Table'] . ";\n";
  26. $sqlData .= "\n\n--
  27. -- Wartosci tabeli `$sqlTable`
  28. --\n\n";
  29. $sqlQuery = "SELECT * FROM $sqlTable\n";
  30. $sqlResultC = $PDO->query($sqlQuery);
  31. ///stworzenie INSERTa dla kazdego rekordu
  32. while ($queryRecord = $sqlResultC->fetch(PDO::FETCH_ASSOC)) {
  33. $sqlData .= "INSERT INTO $sqlTable VALUES (";
  34. $sqlRecord = "";
  35. foreach( $queryRecord as $sqlField => $sqlValue ) {
  36. $sqlRecord .= "'$sqlValue',";
  37. }
  38. $sqlData .= substr( $sqlRecord, 0, -1 );
  39. $sqlData .= ");\n";
  40. }
  41. }
  42. ///zapis zrzutu bazy do archiwum GZ
  43. $gzFile = gzopen('backup_'.$dbName.'_'.date('H_i_d_m_y').'.gz','w9');
  44. gzwrite($gzFile, $sqlData);
  45. gzclose($gzFile);
  46. ///W przypadku gdy nie mamy obslugi GZIPa musimy uzyc:
  47. ///file_put_contents('backup_'.$dbName.'_'.date('H_i_d_m_y').'.sql', $sqlData);
  48. }
  49. catch(PDOException $e){
  50. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  51. }
  52. ?>
nospor
@Xart ale to w zaden sposob nie rozwiazuje problemu autora....
Xart
@UP
To zadziała bez problemu sam przez to wgrywam w phpmyadminie więc musi działać smile.gif
nospor
Jak autor wrzuci to co ma do phpmyadmin to tez mu zadziala.
CHodzi o to, ze autor prawdopodobnie wrzuca to wszystko przez mysql_query, co spowoduje blad rowniez dla twojego kodu
adrianozo
Zmieniłem trochę działanie i poradziłem sobie funkcją system(""); smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.