Я недавно приобрел сервисную сторону проекта среднего размера. Бывший разработчик имеет все свои функции в виде отдельных скриптов php вместо классов (func1.php, func2.php и т. Д.) ... Все эти «функции» ссылаются на mysqli_connect
посредством ссылки на фактический файл 'databaseonnection.php' , Это создает новое соединение каждый раз, когда запускается любой скрипт (каждый раз, когда мне приходится вызывать функцию), и я не хочу этого делать. Я думал о постоянном соединении, но я беспокоюсь о том, что он выходит из рук, поскольку проект растет все больше и больше с каждым днем. Итак, кто-нибудь сталкивался с подобной ситуацией? Каков наилучший способ обработки моего подключения к базе данных? Любые предложения будут ценны.PHP - лучший способ подключения к базе данных при наличии нескольких подключений
ответ
Из документов для mysql_connect. Если второй вызов выполняется с mysql_connect() с теми же аргументами, новая связь не будет установлена, но вместо этого будет возвращен идентификатор ссылки уже открывшейся ссылки.
Спасибо. Это пошло мне на голову! – dudemanbearpig
Имейте в виду, что 'mysql_connect()' был амортизируется с версии php 5.5.0 и удаляется в версии 7.0.0. Вместо этого используйте 'mysqli_connect()'. – assetCorp
EDIT: Извините, я думал, что вам нужна помощь в подключении. Нет никакого способа, кроме как переместить все эти «функции» в один файл, где соединение для них только.
создать con.php файл, где мое подключение к PDO устанавливается затем включить этот файл в любом месте вы хотите использовать соединение Вот основание для соединения PDO:
$PDO = new PDO("mysql:host=localhost;dbname=dbname", "user_name", "password");
Вот мои заметки об использовании объект PDO для создания подготовленных запросов. Вам нужно больше, чем вам нужно, но удачи.
Внутри вашего файла PHP, которому требуется подключение: 1: include ('con.php');
2: $datas = $PDO->prepare(SELECT * FROM table WHERE title LIKE :searchquery);
// prepare method creates and returns a PDOstatment object (print_r($datas);) which contains an execute() method
// PDOstatment object has its own methods ie. rowCount()
// $datas->bindValue(':search', '% . $search . %',)
// Optional - Manually bind value. see http://php.net/manual/en/pdostatement.bindparam.php
3: $datas->execute(array(':searchquery' => $searchquery . '%'));
// pass in values that need to be bound AND EXECUTE.
// There are 17 ways to "fetch" data with the PDO object.
4: $datas-fetchALL(PDO::FETCH_OBJ);
закрыть соединение PDO за ручку:
$PDO = null;
Для этого требуется редизайн всего проекта ... – dudemanbearpig
Да, но вы должны перепроектировать весь проект, re будет использовать очень устаревшую функцию подключения к базе данных. – BenRacicot
Я думаю, что вы будете гораздо лучше использовать PDO
в отличие от старых MYSQL
функций, например, mysql_connect
. Это гораздо более надежный интерфейс.
Ниже основной код, чтобы сделать это:
$db_handle = new PDO("mysql:host=".$db_host.";dbname=".$db_name.";port=".$db_port."", $db_username, $db_password, $connect_options);
где $db_handle
является объект PDO, представляющий соединение с базой данных, $db_host
ваше имя хоста [обычно локальный], $db_name
это имя базы данных, $db_port
является номер порта базы данных [обычно 3306], $db_username
и $db_password
- это ваши учетные данные пользователя для доступа к базе данных, а $connect_options
являются необязательными параметрами подключения для конкретного драйвера.
Чтобы включить постоянные подключения, необходимо установить для него опцию подключения к конкретному драйверу, прежде чем открывать соединение: $connect_options = array(PDO::ATTR_PERSISTENT => true);
затем выполнить более ранний код подключения к базе данных.
Дополнительную информацию об этом можно найти в Документах PHP: http://www.php.net/manual/en/pdo.construct.php и http://php.net/manual/en/pdo.connections.php.
Что касается создания постоянных подключений, я бы предложил закрыть каждое подключение к базе данных, которое вы открываете в конце вашего скрипта (после всех операций с базой данных, конечно), путем аннулирования дескриптора базы данных: $db_handle = NULL;
.Вы должны сделать это, открыли ли вы постоянное соединение или нет. Это звучит контр-интуитивно, но я считаю, что вы должны освободить ресурсы базы данных, когда ваш скрипт будет выполнен.
Недостатки производительности при выполнении этого [по моему опыту] не применимы для большинства приложений. Это, очевидно, является спорно утверждение, и вы также можете найти следующую ссылку полезной в дальнейшем уточнении стратегии в этой связи:
Счастливый кодирования!
если у вас есть очень сложный проект, и нужен большой бюджет, чтобы изменить дизайн, и предпочитают очень простое изменение, то
1) пребывание в mysqli_connect 2) переместить соединение с базой данных в заголовок вашего скрипта. 3) удалите функцию databse функции close() для этих функций. 4) удалите переменные линии связи, они не нужны для отдельной базы данных. 5) закрыть базу данных на конце нижнего колонтитула.
Таким образом, соединение с базой данных устанавливается при запуске скрипта и после всех запросов, оно будет закрыто на нижнем колонтитуле. ваш сервер может обрабатывать соединения без закрытия/повторного открытия с помощью метода keepalive. в основном значение keepalive по умолчанию составляет от 30 до 90 секунд.
'mysql_ *' Функции deprecated.Use 'PDO' или' mysqli'. – ops
оригинальный подход звучит «нормальным», вы уверены, что знаете последствия изменений, которые вы предлагаете? –
@Dagon Я не хочу открывать новое соединение каждый раз, когда мне нужно вызвать функцию ... – dudemanbearpig