Как сделать интерактив с подсказкой таким способом в PHP? - PullRequest
0 голосов
/ 10 апреля 2010
C:\>mysql -uroot -padmin
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.0.37-community-nt-log MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| attendance         |
| fusionchartsdb     |
| mysql              |
| sugarcrm           |
| test               |
+--------------------+
6 rows in set (0.09 sec)

mysql> use mysql;
Database changed
mysql>

Итак, я хочу запустить процесс с mysql -uroot -padmin, и в этом процессе я хочу выполнить следующие операторы:

 show databases
 use mysql
 insert xxx (..) values (..)

Как это сделать в PHP?

Ответы [ 4 ]

0 голосов
/ 10 апреля 2010

Вы можете сделать это через proc_open .

$bin = 'path/to/mysql.exe';
$cmd = $bin . ' -ulocalonly';
$descriptors = array(
  0 => array('pipe', 'r'), 
  1 => array('pipe', 'w'),
  2 => array('pipe', 'r')
);

$process=proc_open($cmd, $descriptors, $pipes, dirname($bin));
if (is_resource($process)) {
  // ....

}

Самое сложное - проанализировать выходные данные другого процесса (из $ pipe [0] и $ pipe [2]) и отреагировать на все возможные ситуации (включая обработку ошибок). Для этого вам может понадобиться расширение expect pecl .

0 голосов
/ 10 апреля 2010

Не думаю, что полностью понимаю ваш вопрос ...

Если вы пытаетесь выполнить операторы в MySQL в PHP, вы можете использовать mysql_ * functions .

Если вы просто хотите выполнить серию команд через командную строку, вы можете использовать

`mysql -u root -p admin --execute "show databases; use mysql; insert ...."`

Если вы хотите написать свою собственную интерактивную замену для инструментов командной строки MySQL в PHP, вам понадобится чертовски много времени и настойчивости. Начните с чтения о PHP CLI: http://php.net/manual/en/features.commandline.php

0 голосов
/ 10 апреля 2010

Клиент MySQL использует библиотеку readline () , которая также доступна для PHP.

PHP-приложение PEAR для командной строки (вызывается при запуске pear install <package>, обрабатывает ввод интерактивной командной строки аналогичным образом, но без использования полной библиотеки readline. Здесь есть некоторый источник для чтения ввода . ключевая линия $line = fgets(STDIN, 2048);

0 голосов
/ 10 апреля 2010

Вы можете написать свою собственную консоль или использовать готовую консоль PHPMyAdmin. Если вы хотите просто взаимодействовать с сервером MySQL через веб-интерфейс.

Хотя написание своего может быть сложным. К сожалению, HTTP-серверы не являются интерактивными. HTTP - это протокол без сохранения состояния. Итак, вы должны найти способ сохранить состояние между запросами. Одним из решений является использование постоянного соединения. Но с неясной целью трудно посоветовать что-то определенное.

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