Как создать базу данных MySql с помощью shell_exec php?

2

Я запускаю MySql + PHP внутри IIS и Windows 7. Это PHP-код, который я использую, чтобы попытаться создать новую базу данных somedb:

$cmd = escapeshellcmd('mysql -u root -p myPasswd  -h localhost -Bse "create database somedb;" ');
$test = shell_exec("C:\\Program^ Files^ ^(x86)\\MySQL\\MySQL^ Server^ 5.6\\bin\\".$cmd);

var_dump($test);
echo "<br>============<br>";
print_r($test);

Я ставил var_dump и print_r только для проверки вывода. После запуска кода у меня есть этот вывод:

string 'C:\Program  Ver 14.14 Distrib 5.6.23, for Win32 (x86)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Usage: C:\Program [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --auto-rehash       Enable automatic rehashing. One doesn't need to use
                      'rehash' to get table'... (length=12085)
=========================================================================================
C:\Program Ver 14.14 Distrib 5.6.23, for Win32 (x86) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Usage: C:\Program [OPTIONS] [database] -?, --help Display this help and exit. -I, --help Synonym for -? --auto-rehash Enable automatic rehashing. One doesn't need to use 'rehash' to get table and field completion, but startup and reconnecting may take a longer time. Disable with --disable-auto-rehash. (Defaults to on; use --skip-auto-rehash to disable.) -A, --no-auto-rehash No automatic rehashing. One has to use 'rehash' to get table and field completion. This gives a quicker start of mysql and disables rehashing on reconnect. --auto-vertical-output Automatically switch to vertical output mode if the result is wider than the terminal width. -B, --batch Don't use history file. Disable interactive behavior. (Enables --silent.) --bind-address=name IP address to bind to... 

Поэтому кажется, что shell_exec может вызывать mysql внутри директивы bin, но не создает базу данных. Это не проблема разрешения. Я попытался создать с использованием sql-инструкции внутри командной строки, и он работает хорошо. Я уже пытался создать без -h localhost или изменить -Bse для -e или - -e xecute. Я пробовал все предложения этого сообщения Создать базу данных в Shell Script - конвертировать из PHP, но он не работает для меня. Что мне не хватает?

================================================== =========================

Только для обновления, это код, который работает хорошо, если я запускаю Apache + win7:

echo shell_exec("C:\\xampp\\mysql\\bin\\mysql   -u root    -e \"CREATE DATABASE IF NOT EXISTS somedb\" ");

Он создает базу данных и ничего не отображает в браузере. Примечание: независимо от пространства между -u и корнем.

Теги:

2 ответа

0

Хорошо, я нашел решение:

  1. Я следую этому руководству, чтобы добавить переменные системной среды. Начало в 7:40. Это было сделано для PHP, но мы можем сделать то же самое для MySql. https://www.youtube.com/watch?v=AEyzKm2pTBw&index=51&list=PL1C87CCACA68A94A3. Просто найдите путь к папке bin в инсталляции папки mysql. В моем случае это C: Program Files (x86)\MySQL\MySQL Server 5.6\bin. Просто скопируйте и вставьте внутри System VAriables Path.
  2. Перезагрузите компьютер, чтобы окна могли распознавать новые переменные при запуске системы.
  3. Проведите тест. Запустите командную строку. Просто введите mysql -uUsername -p Пароль. Должна иметь возможность войти в mysql.
  4. Перейдите в php-код и удалите путь к mysql. Новый shell_exec должен выглядеть следующим образом:

    echo shell_exec ("mysql -umYusername -p mYpassword -e \" CREATE DATABASE, ЕСЛИ НЕ СУЩЕСТВУЕТ somedb\"");

  5. Примечание. AsConfused был полностью установлен. Мы должны избегать пустого пространства между -u и -p

  6. Запустите код. База данных должна быть создана!

0

Поставьте пробелы после -u и -p для стартеров. Я знаю, что это выглядит странно, но у mysql есть аневризма, если нет.

Также, если вы в php, почему вы это делаете? Просто стреляйте из команды mysql из php и без оболочки. Если для активного соединения у вас отсутствуют учетные данные, используйте новый объект подключения с соответствующими учетными данными, сделайте это, а затем закройте это соединение.

Это приводит меня к смущающему, но необходимому вопросу о том, когда U shell, в какой коробке работает эта оболочка, клиентская машина, которая не является сервером?

  • 0
    Привет, ты прав. Для Windows Server это не как пространство. Но не решен вопрос. До сих пор не создать базу данных. Проверьте обновление, которое я разместил.
  • 1
    Справедливый enuf так определенная причуда, но почему оболочки? Нет ответа на это в php с правильными кредитами а
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню