Gal*_*Gal 13 php mysql connection-pooling connect
每次我学习关于php的新东西时,我都不得不重写我的代码(就像mysql连接不能作为句柄在会话中传递一样).
如何在项目中实现mysql连接?很多人提出了"连接池",但阅读手册后我还是输了.它就像:"连接池是mysql_pconnect!" - 我:"和......?现实中有什么不同?你能在会话中传递一个mysql_pconnect吗?为什么这个看似神秘的光环?"
让我解释一下我的情况.我有一个名为"query1"的函数:
function query1($query)
{
$db = new mysql(HOST,USER,PASS,DBNAME);
$result = $db->query($query);
$db->close();
return $result;
}
Run Code Online (Sandbox Code Playgroud)
这似乎是一种查询数据库的一种诡异而低效的方式(特别是因为你需要一个mysql句柄来处理像mysql_real_escape_string这样的函数).这样做的正确形式是什么?有人可以帮帮我吗?
谢谢,我真的很感谢你的回答.
Tyl*_*ter 16
通常,一旦页面加载就会发生连接.AKA
class Database{
public function connect()
{
$this->connection = mysql_connect();
}
// This will be called at the end of the script.
public function __destruct()
{
mysql_close($this->connection);
}
public function function query($query)
{
return mysql_query($query, $this->connection);
}
}
$database = new Database;
$database->connect();
$database->query("INSERT INTO TABLE (`Name`) VALUES('Chacha')");
Run Code Online (Sandbox Code Playgroud)
基本上,您在页面开头打开连接,在结束页面关闭它.然后,您可以在页面中进行各种查询,而不必对连接执行任何操作.
您甚至可以像Erik建议的那样在构造函数中执行mysql_connect.
要使用上面的全局变量(不建议创建全局状态),你可以这样做
Global $db;
$db = new Database;
// ... do startup stuff
function doSomething()
{
Global $db;
$db->query("Do Something");
}
Run Code Online (Sandbox Code Playgroud)
哦,没有人提到你不必传递一个参数.只需连接
mysql_connect();
Run Code Online (Sandbox Code Playgroud)
然后,无论范围是什么,mysql_query都将使用最后一个连接.
mysql_connect();
function doSomething()
{
mysql_query("Do something");
}
Run Code Online (Sandbox Code Playgroud)
根据评论:
我认为你应该使用mysql_pconnect()而不是mysql_connect(),因为mysql_connect()不使用连接池. - 夜间编码器
您可能想要考虑是否使用mysql_connect
或mysql_pconnect
.但是,您仍应该只为每个脚本连接一次.