如何使用PHP实现与MySQL数据库的持久连接?

时间:2019-04-12 14:13:15

标签: php mysql database

我需要有关PHP代码体系结构和最佳实践的帮助。 我需要在MySQL数据库中的4000行上运行更新。

这是我用来连接数据库的功能/代码:

    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();
    }

使用此代码,代码将为lop中的每个键运行connectToMitsubishiComfortDB,这将是4000次,即4000个不同的连接。 我不确定这是否是最佳做法。 有没有一种方法可以让我一次连接到数据库,而不必运行4000个循环,所以我不必每次都连接?

我有办法改进代码吗?

这是一个每天运行的应用程序,可插入到表的4000行中。数据库是MySQL,使用的代码是PHP。

3 个答案:

答案 0 :(得分:1)

您需要移动$ conn_db = connectToDB();行;走出循环

答案 1 :(得分:1)

将连接和准备移到循环外部。您只需要连接一次,就只需准备一次。

$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();
}

答案 2 :(得分:0)

通过向连接字符串中传递array(PDO::ATTR_PERSISTENT => true)来在PDO中启用持久连接的最佳方法。

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

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

注意:

如果您使用的是PDO ODBC驱动程序,并且您的ODBC库支持ODBC连接池(unixODBC和Windows是其中的两个;可能还会更多),那么建议您不要使用持久性PDO连接,而是将连接缓存保留到ODBC连接池层。 ODBC连接池在此过程中与其他模块共享。如果告诉PDO缓存连接,则该连接将永远不会返回到ODBC连接池,从而导致创建了其他连接来服务那些其他模块。