我很难确定我的网络应用程序的最佳解决方案是什么,该应用程序在每个会话中多次访问(主要是读取)相同的用户数据。
我应该在打开新会话时一次将所有用户数据(大约 40 个字段)检索到 $_SESSION,还是应该保持持久 PDO(mysql)连接并在每次脚本执行时仅从数据库中查询我需要的参数?
还:
在同一事务中一次读取/更新大量字段(使用自定义查询)或一个接一个(使用通用查询的自定义组合)在性能上会有很大差异吗?例如
$dbh = new PDO("mysql:host=localhost;dbname",$dbuser,$dbpass,array(PDO::ATTR_PERSISTENT => true));
$fieldlist='';
foreach ($fields as $i=>$field){
$fieldlist.=$field['name'].':field'.$i.',';
}
rtrim($fieldlist,',');
$dbh->prepare("UPDATE user SET ".$fieldlist." WHERE name=:name");
foreach ($fields as $i=>$field){
$stmt->bindValue(':field'.$i, $field['value'], PDO::PARAM_STR);
}
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$dbh = null;
对比
$dbh = new PDO("mysql:host=localhost;dbname",$dbuser,$dbpass,array(PDO::ATTR_PERSISTENT => true));
$dbh->beginTransaction();
foreach($fields as $field){
$stmt=$dbh->prepare("UPDATE user SET ".$field['name']."=:field WHERE name=:name");
$stmt->bindValue(':field', $field['value'], PDO::PARAM_STR);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
}
$dbh->commit();
$dbh = null;