在PDO中,可以使用该PDO::ATTR_PERSISTENT属性使连接持久化.根据php手册 -
持久连接不会在脚本末尾关闭,而是在另一个脚本使用相同凭据请求连接时进行高速缓存和重新使用.持久连接缓存允许您避免每次脚本需要与数据库通信时建立新连接的开销,从而产生更快的Web应用程序.
本手册还建议在使用PDO ODBC驱动程序时不要使用持久连接,因为它可能会妨碍ODBC连接池过程.
显然,除了在最后一种情况下,在PDO中使用持久连接似乎没有任何缺点.但是,我想知道使用这种机制是否存在任何其他缺点,即这种机制会导致性能下降或类似的情况.
使用PDO建立与数据库的连接时,是否应每次使用PDO属性PDO :: ATTR_PERSISTENT?它表示这会为该用户创建一个持久连接,并且每次请求数据库连接时都会获取相同的连接而不是重新建立新连接.为什么这不是默认值?有没有理由不使用它?
我有以下代码并在Firefox中刷新此网页5次,然后MySQL向我展示了5个连接.根据PDO手册,
持久连接不会在脚本末尾关闭,而是在另一个脚本使用相同凭据请求连接时进行高速缓存和重新使用.持久连接缓存允许您避免每次脚本需要与数据库通信时建立新连接的开销,从而产生更快的Web应用程序.
我使用了相同的凭据,但MYSQL连接的数量不断增加.即使尝试关闭连接$db = null也无法关闭连接.我的代码出了什么问题?
<?php
try {
$dbh = new PDO('mysql:host=127.0.0.1;dbname=lingtong', 'root', 'xxxxxx', array(PDO::ATTR_PERSISTENT => true));
foreach ($dbh->query('SELECT * from agent') as $row)
print_r($row);
$dbh = null;
} catch (PDOException $e) {
print "Error! : " . $e->getMessage() . "<br/>";
die();
}
Run Code Online (Sandbox Code Playgroud) 据我所知,对于连接到服务器的每个客户端,PHP都会为它生成一个新线程.但是我想知道它是否真实,如果它是真的,这个线程能活多久?该线程是否正确维护所有静态变量?(像数据库连接)
当这个线程被销毁时,它是否会调用所有析构函数?
脚本1.
$query_ = "lock tables test1 as test11 write";
mysql_query($query);
$query_ = "select * from test11";
sleep(20);
$query_ = "unlock tables";
mysql_query($query_);
Run Code Online (Sandbox Code Playgroud)
脚本2.
$query_ = "select * from test1";
$result = mysql_query($query_);
Run Code Online (Sandbox Code Playgroud)
问题是如果我在运行第一个脚本时运行第二个脚本.表未锁定.我可以从中读取任何数据.
我需要它被锁定并返回错误.
如何使这项工作?
我正在我的本地机器(我的笔记本电脑)上的 LAMP 设置中开发一个 Laravel 应用程序。
出于测试目的,我尝试使用 mysql 服务Aws RDS代替我的本地mysql server. 发现,一个 API 调用只有一个没有连接的数据库调用(查询:显示表) - 平均需要 12 秒。这是荒唐的。当我使用本地 mysql 服务器时,它大约超过 600 毫秒。到目前为止,尚未启用 PDO::ATTR_PERSISTANT。
登录Illuminate\Database\Connectors\Connector.php[inside createConnection()method],发现,每个请求都会调用这个方法。这适用于两个 mysql 服务器。
然后,我设置PDO::ATTR_PERSISTANT为true。但响应时间是相似的。
仔细查看后,在同一个文件中找到了这个:
/**
* Create a new PDO connection instance.
*
* @param string $dsn
* @param string $username
* @param string $password
* @param array $options
* @return \PDO
*/
protected function createPdoConnection($dsn, $username, $password, $options)
{
if (class_exists(PDOConnection::class) && …Run Code Online (Sandbox Code Playgroud)