Как реализовать постоянное соединение с базой данных MySQL с помощью PHP? - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужна помощь с архитектурой кода PHP и передовым опытом. Мне нужно запустить обновление 4000 строк в базе данных MySQL.

Вот функция / код, который я использую для подключения к базе данных:

    function connectToDB(){
      $uname = "USERNAME";
      $pword = "PASSWORD";
      try {
        $db_conn = new PDO('mysql:host=SERVERHOSTNAME;dbname=DATABASENAME;port=PORTNUMBER', $uname, $pword);
        $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      } catch (PDOException $pdoe){
        //fandle exception
      }
      return $db_conn;
    }

Теперь, когда я выполняю реальную работу, вот код, который я использую в цикле,

    $all_array = array("1", "2", ......, "4000");
    foreach ($all_array as $key => $value) {
      $sqlcode = "INSERT INTO table .....";
      $conn_db = connectToDB();
      $conn_db_prepare = $conn_db->prepare($sqlcode);
      $conn_db_prepare->execute();
    }

При этом код будет запускать connectToMitsubishiComfortDB для каждого ключа в цикле, что будет 4000 раз, то есть 4000 различных соединений. Я не уверен, что это лучшая практика. Есть ли способ для меня подключиться к базе данных один раз, и не запускать 4000 циклов, поэтому мне не нужно подключаться каждый раз?

Есть ли способ улучшить код?

Это приложение, которое запускается каждый день и вставляется в 4000 строк в таблице. База данных - MySQL, а используемый код - PHP.

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Переместите как соединение, так и приготовление за пределы цикла. Вам нужно подключиться только один раз, и вам нужно подготовиться только один раз.

$conn_db = connectToDB();
$conn_db_prepare = $conn_db->prepare('INSERT INTO table .....');
$all_array = array("1", "2", ......, "4000");
foreach ($all_array as $key => $value) {
    $conn_db_prepare->execute();
}
1 голос
/ 12 апреля 2019

вам нужно переместить строку $ conn_db = connectToDB (); из вашей петли

0 голосов
/ 12 апреля 2019

Лучший способ включить постоянное соединение в PDO, передав array(PDO::ATTR_PERSISTENT => true) в строку соединения.

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true));

https://www.php.net/manual/en/pdo.connections.php

Примечание:

Если вы используете ODBC-драйвер PDO, а ваши библиотеки ODBC поддерживают пул соединений ODBC (unixODBC и Windows - это два, а может быть и больше), то рекомендуется не использовать постоянные соединения PDOи вместо этого оставьте кэширование соединения на уровне пула соединений ODBC.Пул соединений ODBC используется совместно с другими модулями;если PDO предписано кэшировать соединение, то это соединение никогда не будет возвращено в пул соединений ODBC, что приведет к созданию дополнительных соединений для обслуживания этих других модулей.

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