Bir mysql_connect bir PHP PDO bağlantı alma (?)

2 Cevap php

I mysql_connect () çağıran bir eski PHP / MySQL uygulaması var. Varolan aşağı kod ton, bu bağlantıyı kullanarak, doğrudan ya da korumalar aracılığıyla, mysql_query() çağrıları yapar.

Ben app geliştirmek, yeni kod için, ben PDO kullanarak başlamak istiyorum.

Ben aynı ana / kullanıcı kullanarak PDO bağlantı yaparsanız / / dbname kimlik geçiyorum, kaputun altında, PHP özgün bağlantıyı yeniden kullanacak kadar şanslı olabilir? Ya PHP (tamamen anlaşılabilir olsa, istenmeyen) sunucuya iki ayrı bağlantı yaratacak?

Teşekkürler!

2 Cevap

Eğer iki farklı API'leri (yani mysql_* ve PDO) kullanıyorsanız, PHP iki farklı bağlantıları üretecektir.


And, as a "proof", consider this portion of code :

$db = mysql_connect('localhost', 'USER', 'PASSWORD');
$pdo = new PDO('mysql://@localhost/astralblog', 'USER', 'PASSWORD');
sleep(5);


Running this will cause two distinct connections, on the MySQL server -- which will sleep for 5 seconds :

mysql> show processlist;
+----+------------+-----------------+------------+---------+------+-------+------------------+
| Id | User       | Host            | db         | Command | Time | State | Info             |
+----+------------+-----------------+------------+---------+------+-------+------------------+
| 41 | astralblog | localhost:46551 | astralblog | Sleep   |  188 |       | NULL             |
| 42 | astralblog | localhost:46552 | astralblog | Sleep   |  188 |       | NULL             |
| 43 | astralblog | localhost       | astralblog | Query   |    0 | NULL  | show processlist |
| 64 | astralblog | localhost       | NULL       | Sleep   |    4 |       | NULL             |
| 65 | astralblog | localhost       | NULL       | Sleep   |    4 |       | NULL             |
+----+------------+-----------------+------------+---------+------+-------+------------------+
5 rows in set (0,00 sec)

(The connections in question are the two last one, which appeared when I started the PHP script, and disappeared after 5 seconds)

Hem uzantıları dahili EG(persistent_list) kalıcı bağlantı tanıtıcı depolamak için kullanın. Ama bu liste için farklı sağlamalarının / anahtarları oluşturmak, böylece, ilgili diğer uzantısı girdilerini bulamıyorum.

MySQL uzantı oluşturur sırasında PDO formun anahtarları "mysql_<host&port>_<user>..." oluşturur "PDO:DBH:DSN=<dsn>:<user>:....". Sağlamalarının neredeyse bir php komut dosyası dizi-tuşlar gibi kullanılabilir. (Aşırı) simplyfied örnek:

function pconnect($host,$user,$pass) {
  global $persistent_list;
  $hashkey = sprintf("extensionname_%s_%s_%s", $host, $user, $pass);
  if ( isset($persistent_list[$hashkey]) ) {
    // use stored connection
  }
  else {
    // create new connection
  }
}

Yani cevap: Hayır, bağlantılar arasında paylaşılan olmayacak ve mysql uzantısı ve PDO tarafından yeniden kullanılır.