Выполнить sql из файла dump.sql посредством php

zek24

Мой дом здесь!
Команда форума
Модератор
Регистрация
14 Ноя 2009
Сообщения
811
Реакции
310
  • Автор темы
  • Модер.
  • #1
Привет.
Первый раз делаю подобное, весь вечер убил - рабочего решения не нашел.

Есть
PHP:
$conn = mysqli_connect($config[0], $config[1], $config[2], $config[3]);
и дамп типа
Код:
SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

DROP TABLE IF EXISTS `table`;
CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cat` text NOT NULL,
  `time` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Логичный вопрос: как это правильно всунуть в БД?
 
Привет.
Первый раз делаю подобное, весь вечер убил - рабочего решения не нашел.

Есть
PHP:
$conn = mysqli_connect($config[0], $config[1], $config[2], $config[3]);
и дамп типа
Код:
SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

DROP TABLE IF EXISTS `table`;
CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cat` text NOT NULL,
  `time` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Логичный вопрос: как это правильно всунуть в БД?
как-то так:
PHP:
mysqli_query($conn , "SET NAMES utf8");
mysqli_query($conn , "SET time_zone = '+00:00'");
mysqli_query($conn , "SET foreign_key_checks = 0");
mysqli_query($conn , "SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");
mysqli_query($conn , "DROP TABLE IF EXISTS `table`");
mysqli_query($conn , "CREATE TABLE `table` (
                                `id` int(11) NOT NULL AUTO_INCREMENT,
                                `cat` text NOT NULL,
                                `time` text NOT NULL,
                                 PRIMARY KEY (`id`)
                                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
 
PHP:
$db = new PDO($dsn, $user, $password);

$sql = file_get_contents('file.sql');

$mysql_query = $db->exec($sql);

запуск каждой строки через mysql_query
 
Последнее редактирование:
  • Автор темы
  • Модер.
  • #4
как-то так:
PHP:
m");
спасибо, но хотелось бы решение более универсальное. Сам файл с дампом чуть больше)

PHP:
$db = new PDO($dsn, $user, $password);

$sql = file_get_contents('file.sql');

$mysql_query = $db->exec($sql);

запуск каждой строки через mysql_query
отлично - все сработало на ура

только остался вопрос, как получить какой-то отчет
пробовал

print("обработано $mysql_query строк.\n"); - выдает 0, хотя там несколько таблиц по несколько строк в каждой


///////////////////////
и такой вопрос
создаю функцию возвращающую dbh
PHP:
function test_db_connect(){
    $config = file_get_contents('config.php', true);
    $config = explode(";", $config);
    try {
        $dbh = new PDO("mysql:host=$config[0];dbname=$config[3]", $config[1], $config[2]);
        $_SESSION['mess_db']="Connected successfully";
        return $dbh;
    } catch (PDOException $e) {
        $_SESSION['mess_db']="Connection failed ". $e->getMessage();
    }

Но дальше в коде, при вставке функции и вызове dbh
test_db_connect();
$mysql_query = $dbh->exec($sql);

выдает, что dbh не найден...
 
Последнее редактирование:
более универсальное: см. в сторону mysqldumper (есть ветка под 7 и mysqli), sypex dumper. есть phpmyadmin, но это из тяжеловесов. хотя у тебя там несколько строк. теперь по твоему последнему коду: как бы
PHP:
$dbh = test_db_connect();
ошибочка.
Дальше: см. вот Для просмотра ссылки Войди или Зарегистрируйсяпо поводку количества строк
PHP:
echo $db->rowCount();
после запроса в твоем случае после
PHP:
$db->execute();
 
Последнее редактирование:
я бы использовал запуск exec('mysql -u user -p pass dbname < dump.sql');
пусть mysql сам делает свою работу, будет практичнее, чем через php мучить его через несколько обёрток
 
Назад
Сверху