如何在PHP中以这种方式进行交互式交互?

时间:2010-04-10 05:15:55

标签: php exec

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 :(得分:0)

您可以编写自己的控制台或使用名为PHPMyAdmin的现成控制台。如果你的意图只是使用web-frontend与mysql服务器进行交互。

虽然写你自己可能很棘手。不幸的是,HTTP服务器不是交互式的。 HTTP是无状态协议。因此,您必须找到一种在请求之间保存状态的方法。解决方案之一是使用持久连接。但由于目标不明确,很难提出任何确定的建议。

答案 1 :(得分:0)

我认为我不完全听从你的问题......

如果您尝试在PHP中使用MySQL执行语句,则可以使用mysql_* functions

如果您只想通过命令行执行一系列命令,可以使用

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

如果你想在PHP中为MySQL命令行工具编写自己的交互式替代品,那么你将需要大量的时间和坚持不懈的努力。首先阅读PHP的CLI:http://php.net/manual/en/features.commandline.php

答案 2 :(得分:0)

MySQL客户端使用readline()库,PHP也可以使用它。

PHP的PEAR命令行应用程序(在运行pear install <package>时调用,以类似的方式处理交互式命令行输入,但不使用完整的readline库。有一些input-reading source here。关键行是{ {1}}

答案 3 :(得分:0)

您可以通过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)) {
  // ....

}

棘手的部分是解析其他进程的输出(来自$ pipes [0]和$ pipes [2])并对所有可能的情况(包括错误处理)做出反应。您可能需要查看expect pecl extension