является ли приведенный в описании код исполняемым в системе Windows? - PullRequest
0 голосов
/ 05 мая 2010

является ли данный код исполняемым в системе Windows? как кажется, команды Linux

   echo 'create database foo2' | mysql -uroot
    mysqldump --skip-triggers -uroot foo | mysql -uroot foo2

EDITED Я выполняю следующий код, но не получаю то, что ожидаю

<?php 
mysql_connect('localhost','root','********');
echo 'create database pranav_chk'. | mysql -u root
    mysqldump --skip-triggers -u root pranav_test | mysql -u root pranav_chk;
 ?>

Ответы [ 3 ]

2 голосов
/ 05 мая 2010

Код использует три функции командной строки:

  • Команда echo
  • Подключение команд через каналы (символ |)
  • Клиент командной строки mysql

Все три доступны и работают одинаково (в той степени, в которой они используются здесь) в Windows и Linux, поэтому код фактически переносим.

Редактировать: Код должен быть запущен в оболочке, вы не можете просто поместить его в скрипт PHP. Вы должны использовать exec(), что-то вроде этого:

<?php
  exec("echo 'create database foo2' | mysql -uroot");
  exec("mysqldump --skip-triggers -uroot foo | mysql -uroot foo2");
?>

Однако вызов mysql_connect() до этого не принесет никакой пользы, поскольку он действителен только для сценария PHP. Вы должны будете выполнить аутентификацию через командную строку напрямую. В качестве альтернативы вы можете использовать его и mysql_create_db() для замены первой строки exec().

1 голос
/ 05 мая 2010

3 ноты.

Во-первых, соединение с базой данных в сценарии PHP не передается внешней системной команде.

Во-вторых, вам необходимо ввести пароль в командной строке.

Три, используйте функцию exec для запуска вашей команды.

Например:

<?php
$PASSWORD="YOURPASSWORD";
exec("echo 'create database foo2' | mysql -u root -p $PASSWORD");
?>

Не проверено, но это общая идея.

1 голос
/ 05 мая 2010

Должно работать да, при условии, что mysql и mysqldump находятся в переменной PATH Windows. Хотя вы должны добавить пробел между -u и root.

...