Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Совместное использование mysqli и mysql: too many connections
 
 автор: FaStY   (29.03.2011 в 15:50)   письмо автору
 
 

Подскажите, предыдущий девелопер начал использовать на сайте $mysqli = new mysqli(); проблема в том, что сайт написан смешано, классы для объектов, плюс просто функции. И в каждой отдельной функции либо в методе класса идет заново коннект к базе выборка и закрытие(естественно только там где есть выборка из базы данных).
А сейчас, при использовании кэширования собираюсь сделать сдедующее:
1) выбирать только Id например юзеров
2) выбирать каждого юзера по отдельности и засовывать инфу в кэш
Следовательно будет вообще много коннектов.

Как можно это оптимизировать, сайт изредка кидает "too many connections".

  Ответить  
 
 автор: cheops   (29.03.2011 в 15:55)   письмо автору
 
   для: FaStY   (29.03.2011 в 15:50)
 

Собственно первое, что приходит в голову: мигрировать либо вперед к mysqli, либо назад к mysql.

  Ответить  
 
 автор: FaStY   (29.03.2011 в 16:13)   письмо автору
 
   для: cheops   (29.03.2011 в 15:55)
 

Вперед к mysqli

  Ответить  
 
 автор: cheops   (29.03.2011 в 16:16)   письмо автору
 
   для: FaStY   (29.03.2011 в 16:13)
 

Тогда можно будет использовать подготовленные запросы - они и MySQL кэшируются лучше и с точки зрения возникновения SQL-инъекций безопаснее, да и выполняются быстрее, чем обычные запросы - их MySQL анализировать не нужно, она помнит их план выполнения.

  Ответить  
 
 автор: FaStY   (29.03.2011 в 16:20)   письмо автору
 
   для: cheops   (29.03.2011 в 16:16)
 

Вы имеете ввиду $mysqli->prepare()? это и используется

Вот как все выглядит, довольно стандартно

function blablalb() {
include($_SERVER['DOCUMENT_ROOT']."/mysqli_connect.php");
                
                if ($stmt = $mysqli->prepare("SELECT first_name, middle_name, last_name, tag_name, user_slug FROM users WHERE user_id=? LIMIT 1")){
                                    
                    $stmt->bind_param('i', $this->uid);
                    $stmt->execute();
                    $stmt->bind_result($first_name, $middle_name, $last_name, $tag_name, $user_slug);
                    $stmt->fetch();
                    $stmt->close();
                    $mysqli->close();
                    
                }
}

  Ответить  
 
 автор: cheops   (29.03.2011 в 16:27)   письмо автору
 
   для: FaStY   (29.03.2011 в 16:20)
 

Да, если mysqli сейчас поправили и там разработано все как надо, то ваш SQL-запрос превратится на стороне сервера в нечто подобное
PREPARE stmt1 
FROM 'SELECT first_name, middle_name, last_name, tag_name, user_slug
FROM users
WHERE user_id=?
LIMIT 1'

  Ответить  
 
 автор: FaStY   (29.03.2011 в 16:31)   письмо автору
 
   для: cheops   (29.03.2011 в 16:27)
 

C запросами понятно, а подскажите, нормально это что столько коннектов будет? может в __consturct установить $this->mysqli = $mysqlli и в методах пользоваться уже $this->mysqli, это же должно снизить кол-во коннектов?

  Ответить  
 
 автор: cheops   (29.03.2011 в 16:37)   письмо автору
 
   для: FaStY   (29.03.2011 в 16:31)
 

Можно. Но вообще, когда у вас не будет переключений между библиотеками и явного закрытия соединения, они снизятся автоматически. Дело в том, что при открытии соединения с теми же параметрами, которые используются, вместо установки нового соединения, возвращается дескриптор существующего. Т.е. уже открытое соединение по новой не открывается - функция просто возвращает ссылку на существующий дескриптор.

  Ответить  
 
 автор: FaStY   (29.03.2011 в 16:55)   письмо автору
 
   для: cheops   (29.03.2011 в 16:37)
 

Понял, т.е. не стоит заморачиваться)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования