我需要优化脚本以获得高性能,所以问题是如何将 MySQL 多查询添加到此代码?
foreach($multiContent as $htmlContent) {
$email = urldecode($email['1']);
$user = $user['1'];
//store in db
$db->query("UPDATE eba_users
SET mail = '$email'
WHERE username = '$user'");
//echo "email is $email and user is $user\n";
}
//close if ($array_counter % 200
unset($array_counter);
unset($data);
}
最佳答案
如果您已经在使用 mysqli 或 PDO,您应该为您的查询使用准备好的语句,因为它们是受支持的。这也会稍微提高性能,因为不需要将整个查询再次发送到数据库服务器。然而,最大的优势是准备好的语句提供了更高的安全性。
除此之外,尝试在 username
上添加索引以加快查询速度(如果您还没有的话)。
编辑: 如果您想在一个查询中完成所有操作,正如您似乎建议的那样,您也可以使用 ON DUPLICATE KEY UPDATE如对 this question 的回答所述:
INSERT INTO eba_users (`username`, `mail`)
VALUES
('username1','$email1'),
('username2','$email2'),
('username3','$email3'),
('username4','$email4'),
....
('usernameN','$emailN'),
ON DUPLICATE KEY UPDATE `mail`=VALUES(mail);
但是,这可能不如使用带有常规 UPDATE
的准备好的语句那么快。
Edit2:根据要求,这可能是您在 mysqli 中绑定(bind)参数应该做的事情的近似值:
if ($stmt = $mysqli->prepare("UPDATE eba_users SET mail= ? WHERE username= ?")) {
/* loop through array of users */
foreach ($array as $username => $newemail) {
/* bind parameters for markers */
$stmt->bind_param("ss", $newemail, $username);
/* execute query */
$stmt->execute();
}
}
当然,如果失败,这不会提供任何类型的错误消息。为此,您可以查看 mysqli::error
关于php - 如何使用 MySQL 多查询优化查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990216/