2011-07-20 14 views
3

私はPHPからMySQLの対話型クライアントを呼び出すにはどうすればよいですか?

`mysql -uroot`; 

だけのシェルから

$ mysql -uroot 

を実行するんとしてMySQL対話型のクライアントを入力するように取得しようとしています。

PHPスクリプトが(またはそれ以前に)存在しても問題ありませんが、MySQLクライアントを呼び出すために必要です。

私はproc_open()ともちろんsystem()、exec()とpassthru()を使ってみました。誰かがヒントを持っているかどうか分かります。

+2

あなたはエラーが発生していますか?また、 '-u'と' root'の間に 'mysql -u root'とスペースがあるはずです。 – Dirk

+3

@Dirk:-urootともに動作します – Fabio

+1

スペースなしでも動作します。資格情報が間違っていると、mysql接続エラーが発生します。しかし、それらが正しいならば、それはちょうどハングアップし、私はCtrl + Cでそれから抜け出す必要があります。 – Homer6

答えて

6

新ソリューション:

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

旧1:

タブ補完のための保存(あなたの代わりにfgetsのを使用しての関数freadでバイトを読み出す場合は、おそらくそこにそれを得ることができる)、このあなたの道に迷ってしまいます。たくさんの調整が必要です。

<?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

私はLinuxとMacの両方で試してみましたが、Mac OSXでは動作しません。それは私に 'このシステムではサポートされていないpty擬似端末'警告を与えるでしょう。 – Fabio

+0

アップデートを見てください。おそらくそれがうまくいくでしょう( 'pty'とダイレクトストリームが文書化されていないのですが、Linuxで多かれ少なかれサポートされています)。 – Wrikken

+1

私はMac上でさえ完全な実用的なソリューションであなたの答えを更新しました。これにより、readlineライブラリさえも動作しているので、バックスペースと矢印キーを使うことができます。よくやった。 – Fabio

0

私はうまくいくと思いますが、入力を待っています。一部のSQLコマンドをstdinに送信してみてください。もちろん、バックティックオペレータはIOリマッピングをサポートしていないので、より複雑なプロセス処理が必要になります。

+0

への私のコメントを参照してください残念ながら、それは私にとって有用ではありません。私はプログラムでCLIと対話しようとはしていません。私はそれをショートカットとして使用しようとしています。私はBASHスクリプトで呼び出すことができますが、今回はすべてのコマンドが共通の場所を経由するPHPベースのCLIインターフェイスを構築しているので、今回はBASHを使いたくありません。それをBASHで実行することで、その一貫性が失われます。 – Homer6

+0

私はそれを取得しません。あなたは 'mysql'を呼び出そうと思っていますが、入力はしません。 – Javier

+0

ほとんどのWebプロジェクトは、別々の接続資格証明を持ち、(同じプロジェクト内であっても環境は異なる)異なるデータベースに接続します。私は自分のプロジェクトのシェルに "db"と入力してデータベースにログインし、適切な資格情報を提供したいと思います。私はデータベースへの接続を自動化したい。 – Homer6

関連する問題