PHP istemi ile bu şekilde interaktif yapmak nasıl?

4 Cevap php
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>

Yani mysql -uroot -padmin tarafından bir süreci başlatmak istiyoruz, ve bu süreçte ben bu ifadeleri çalıştırmak istiyorum:

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

PHP bunu yapmak nasıl?

4 Cevap

Ben tamamen Sorunuzu takip sanmıyorum ...

Eğer PHP MySQL ifadeleri çalıştırmak için çalışıyorsanız, size mysql_* functions kullanabilirsiniz.

Sadece komut satırı üzerinden bir dizi komut yürütmek istiyorsanız, kullanabileceğiniz

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

Eğer PHP MySQL komut satırı araçları için kendi interaktif yedek yazmak istiyorsanız, size zaman ve azim bir sürü bir cehennem ihtiyacımız olacak. PHP'nin CLI okuyarak başlayın: http://php.net/manual/en/features.commandline.php

Kendi konsolu yazmak ya PHPMyAdmin denilen hazır birini kullanabilirsiniz. Niyetinizi sadece mysql sunucu, web önyüz kullanarak etkileşim varsa.

Kendi yazma zor olabilir rağmen. Ne yazık ki, HTTP sunucuları etkileşimli değildir. HTTP vatansız protokol. Yani, istekleri arasında bir devleti kurtarmak için bir yol bulmak zorunda. Çözümlerden biri kalıcı bağlantı kullanmaktır. Ama hedefi belirsiz olması ile belli bir şey tavsiye etmek zor.

MySQL istemci yanı sıra PHP için kullanılabilir readline() kütüphanesini kullanır.

PHP'nin ARMUT komut satırı uygulaması (Eğer pear install <package> benzer bir şekilde etkileşimli komut satırı işler girdi, ancak tam taleb kütüphane kullanmadan. Orada çalıştırdığınızda çağrılan input-reading source here bazı. Tuş hattı olma $line = fgets(STDIN, 2048);

Sen proc_open aracılığıyla yapabilirsiniz.

$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)) {
  // ....

}

Zor kısmı ($ borular [0] ve $ borular [2]), diğer sürecin çıkışını ayrıştırmak ve (hata işleme dahil) tüm olası durumlara tepki olduğunu. Bunun için expect pecl uzantısı içine bakmak isteyebilirsiniz.