Как я могу вызвать интерактивный клиент MySQL из PHP? - PullRequest
3 голосов
/ 21 июля 2011

Я пытаюсь получить

`mysql -uroot`;

для входа в интерактивный клиент MySQL так же, как при выполнении

$ mysql -uroot 

из оболочки делает.

Это нормально, если скрипт PHP существует после (или до), но он мне нужен для вызова клиента MySQL.

Я пытался использовать proc_open () и, конечно, system (), exec () и passthru (). Хотите знать, если у кого-нибудь есть какие-либо советы.

Ответы [ 2 ]

6 голосов
/ 21 июля 2011

Новое решение:

<?php
$descriptorspec = array(
   0 => STDIN,
   1 => STDOUT,
   2 => STDERR
);
$process = proc_open('mysql -uroot', $descriptorspec, $pipes);

Старый:

Сохранить для завершения табуляции (вы, вероятно, могли бы получить его там, если бы вы читали байты с помощью fread вместо использования fgets), это поможет вам продвинуться вперед, оставив множество настроек:

<?php
$descriptorspec = array(
   0 => array("pty"),
   1 => array("pty"),
   2 => array("pty")
);
$process = proc_open('mysql -uroot', $descriptorspec, $pipes);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking(STDIN,0);
do {
   echo stream_get_contents($pipes[1]);
   echo stream_get_contents($pipes[2]);
   while($in = fgets(STDIN)) fwrite($pipes[0],$in);
} while (1);
0 голосов
/ 21 июля 2011

Полагаю, это работает, но ждет некоторого ввода.Попробуйте отправить несколько команд sql на stdin.Конечно, поскольку оператор backtick не поддерживает переназначение ввода-вывода, вам потребуется более сложная обработка процессов.

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