我需要有关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。
答案 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连接池,从而导致创建了其他连接来服务那些其他模块。