PHP Mysql против Mysqli в Windows - PullRequest
4 голосов
/ 16 марта 2012

Я использую PHP 5.3.10 в Windows (Windows 7 64bit), используя Apache и Mod_php.

Я нахожусь в процессе, чтобы решить, какую библиотеку я должен использовать, поэтому я тестирую Mysql и MySQLi

Я создал две страницы для теста

$mysqli = new mysqli("127.0.0.1", "root2", "secretsquirrel", "test");
for ($i=0;$i<100;$i++) {
    $result = $mysqli->query("SELECT * from test");
    // var_dump($result);
    echo "ok $i";
    $result->close();
}

И

$dbh=mysql_connect("127.0.0.1","root2","secretsquirrel",true);  
mysql_select_db("test",$dbh);
for ($i=0;$i<100;$i++) {
    $result=@mysql_query("SELECT * from test",$dbh);
    echo "ok";
    mysql_free_result($result);
}

В обоих тестах я могу подключиться без проблем и получить информацию.

Однако, если я выполняю одновременный тест (5 одновременно работающих пользователей), MySqli будет мучительно медленным.

И хуже всего, если я выполню одновременный тест (10 одновременных пользователей), затем MySQLi аварийно завершает работу Apache.

Faulting application name: httpd.exe, version: 2.2.22.0, time stamp: 0x4f4a84ad
Faulting module name: php5ts.dll, version: 5.3.10.0, time stamp: 0x4f2ae5d1
Exception code: 0xc0000005
Fault offset: 0x0000c7d7
Faulting process id: 0x1250
Faulting application start time: 0x01cd037de1e2092d
Faulting application path: C:\apache2\bin\httpd.exe
Faulting module path: C:\php53\php5ts.dll
Report Id: 1fb70b72-6f71-11e1-a64d-005056c00008

С MySql все работает отлично, даже с 1000 одновременными пользователями.

Вопрос: я делаю что-то не так ?.

Это моя конфигурация php.ini

[MySQLi]
mysqli.max_persistent = -1
;mysqli.allow_local_infile = On
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off

ps: Как и предполагалось, PDO - худший способ

Код: (может быть, тест не верен?)

$dbo = new PDO("mysql:host=127.0.0.1;dbname=test", "root2", "secretsquirrel" );
for ($i=0;$i<100;$i++) {
    $dbo->query("SELECT * from test");
    echo "ok $i";
}

Результат хуже, чем MySQLi

Обновление:

Я сделал то же самое в Linux (redhat) и MysqlI / PDO более стабильны,

(1000 одновременных вызовов, при меньшем нет разницы).

Сумма модуля (мс) Мин (мс) Макс (мс)

MySQLi 66986 265 1762

MySQL 64521 234 1388

PDO 75426 249 1809

(минус лучше).

Ну, видимо, ответа нет, под windows MysqlI и PDO это большое нет (разве что для процесса разработки).Для linux эти три одинаковы, однако для популярного сервера (много одновременных пользователей) Mysql - лучший, MysqlI - близко (3% медленнее), а PDO - большое нет (+ 10% медленнее).

Однако это не настоящий тест, поэтому пробег может варьироваться.Тем не менее, результаты соответствуют распространенному мнению, Mysql> Mysqli> pdo.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Единственная особенность в mysqli, которая должна иметь все значение, это параметризованные запросы.Интерфейс mysql не имеет их, что означает, что вы будете самостоятельно интерполировать значения в запросы, а это, в свою очередь, означает, что у вас есть большой потенциал для уязвимостей SQL-инъекций - просто получается, что защита конкатенации запросов не так тривиальнакак это звучит.

Кстати, вы рассматривали PDO?Он предлагает те же функции, что и MySQL, но может подключаться к любой из поддерживаемых (и настраиваемых) баз данных, поэтому, если в какой-то момент вы решите перейти на, скажем, PostgreSQL, SQLite или SQL Server, у вас есть только различия в диалекте SQLбеспокоиться, вместо того, чтобы портировать все на другой API.

0 голосов
/ 16 марта 2012

Apache может не поддерживать все, я сталкивался со многими проблемами в отношении шифрования и дешифрования паролей в отношении Apache, но нашел решение по размещению его на IIS ...

Попробуйте запустить приложение в IIS... http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis/ поможет вам принять PHP на IIS 7 ... http://www.websitehosting.com/apache-vs-iis-web-server/ прояснит разницу между Apache и IIS по отношению к PHP ...

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