すべてのセッションで同じユーザーデータに何度もアクセス(主に読み取り)しているWebアプリに最適なソリューションを決定するのに苦労しています。
新しいセッションを開くときに、すべてのユーザーデータ(約40フィールド)を一度に$ _SESSIONに取得する必要がありますか、それとも永続的なPDO(mysql)接続を維持し、代わりにスクリプトの実行ごとにデータベースから必要なパラメーターのみをクエリする必要がありますか?
また:
同じトランザクションで一度に多数のフィールドを読み取る/更新する(カスタムクエリを使用する)場合と、1つずつ(汎用クエリのカスタムの組み合わせを使用する場合))のパフォーマンスに大きな違いはありますか?例えば
$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;