Запуск MySQL * .sql файлов в PHP - PullRequest
       30

Запуск MySQL * .sql файлов в PHP

44 голосов
/ 27 октября 2010

У меня есть два *.sql файла, которые я использую при создании новой базы данных веб-сайта.Первый файл создает все таблицы.Второй файл заполняет некоторые записи по умолчанию.Я хотел бы выполнить эти файлы из PHP.Я также использую Zend_Framework, если это поможет в этом.

Дополнительная информация

  1. У меня нет доступа к консоли
  2. Iпытаюсь автоматизировать создание сайта из нашего приложения.

РЕШЕНИЕ

Использование shell_exec() ...

$command = 'mysql'
        . ' --host=' . $vals['db_host']
        . ' --user=' . $vals['db_user']
        . ' --password=' . $vals['db_pass']
        . ' --database=' . $vals['db_name']
        . ' --execute="SOURCE ' . $script_path
;
$output1 = shell_exec($command . '/site_db.sql"');
$output2 = shell_exec($command . '/site_structure.sql"');

... Я никогда не получал полезного вывода, но следовал некоторым предложениям на другом потоке и, наконец, все заработало.Я переключаюсь в формат --option=value для команд и использую --execute="SOURCE ..." вместо < для выполнения файла.

Кроме того, я никогда не получал хорошего объяснения разницы между shell_exec() и exec().

Ответы [ 12 ]

0 голосов
/ 23 июня 2016

Чтобы выполнить генерацию таблицы из приложения, вы можете создать php-файл, который будет делать это при запуске.

$hostname  = "localhost";
$database  = "databasename";
$username  = "rootuser";
$UserPassword  = "password";

$myconnection = mysql_pconnect($hostname, $username , $UserPassword) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_connect($hostname , $username , $UserPassword ) or die(mysql_error());
mysql_select_db($database) or die(mysql_error());

if ( !$myconnection ){ echo "Error connecting to database.\n";}


$userstableDrop = " DROP TABLE IF EXISTS `users`";
$userstableCreate = " CREATE TABLE IF NOT EXISTS `users` (
`UserID` int(11) NOT NULL,
  `User_First_Name` varchar(50) DEFAULT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15" ;

$userstableInsert = "INSERT INTO `users` (`UserID`, `User_First_Name`) VALUES
(1, 'Mathew'),
(2, 'Joseph'),
(3, 'James'),
(4, 'Mary')";

$userstableAlter1 = "ALTER TABLE `users` ADD PRIMARY KEY (`UserID`)";
$userstableAlter2 = " ALTER TABLE `users` MODIFY `UserID` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=15";

$createDb_sql = $userstableDrop;
$insertSite = mysql_query($createDb_sql);

$createDb_sql = $userstableCreate;
$insertSite = mysql_query($createDb_sql);

$createDb_sql = $userstableInsert;
$insertSite = mysql_query($createDb_sql);

$createDb_sql = $userstableAlter1;
$insertSite = mysql_query($createDb_sql);

$createDb_sql = $userstableAlter2;
$insertSite = mysql_query($createDb_sql);

echo "Succesful!";
mysql_close($myconnection );
0 голосов
/ 27 октября 2010

Одно предложение:

// connect to db.
if (mysql_query("SOURCE myfile.sql")) {

  echo "Hello Sonny";

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...