mysql pdo事务和会话存储

Not*_*aeL 5 php mysql pdo transactions persistent-connection

我无法确定什么是我的网络应用程序的最佳解决方案,即每次会话访问(主要是读取)多次相同的用户数据.

我应该在打开新会话时一次性检索所有用户数据(大约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;
Run Code Online (Sandbox Code Playgroud)

$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;
Run Code Online (Sandbox Code Playgroud)

小智 1

做不到。即使你能做到这一点,这也是一个坏主意。您将创建一个具有大量并发打开连接的情况,这将超过您的最大连接数。

我不确定为什么您必须使用相同的数据不断更新会话。只需将数据放入会话一次即可完成。

如果您正在处理大型数据集,您可能需要考虑缓存。这将减少数据库负载。你可以使用memcached。这将提高性能,它允许您指定要缓存的资源和数量。