[英]How can I use a common PDO object for all my functions? Can I define PDO connection as a constant and use it?
现在,我在php页面上的每个函数中创建了一个dbo对象。 可以
define($dbh3, new PDO(...));//test
声明工作? 可以将PDO对象称为全局常量吗? 如何创建通用的pdo连接? 我必须在每个函数中创建一个pdo对象吗?
现在的情况:
$dbh = new PDO(...);
define($dbh3, new PDO(...));//test
function actorexists($name) {
$dbh = new PDO(...);
$s = $dbh->prepare("...");
}
function login($name, $password) {
$dbh = new PDO(...);
$s = $dbh->prepare("..."}
}
function actorbyname($name) {
$dbh = new PDO(...);
$s = $dbh->prepare("...;
}
绝对不要为每个SQL语句打开新的连接。 这非常浪费,因为您可以在单个PHP请求期间运行许多查询,并且打开新套接字和验证MySQL用户会产生一些开销。 它不像Oracle或其他数据库的开销那样糟糕,但是您应该尝试将其最小化。
但是您不能为您的dbh定义一个常量。
...仅允许标量和null值。 标量值是整数,浮点数,字符串或布尔值。
换句话说,对象实例或数组不是常量的合法值:
<?php
define('DB', new stdClass());
Warning: Constants may only evaluate to scalar values
in test_define_constant_object.php on line 3
您可以将$ dbh设置为全局变量,但是许多PHP开发人员不鼓励使用全局变量。
您还可以使用Registry Pattern ,它基本上是一个全局数组类,可以用来代替单个全局变量。 在脚本的引导代码中执行此操作,因此每个请求仅运行一次:
Zend_Registry::set("dbh", new PDO(...));
然后在您的函数中:
$dbh = Zend_Registry::get("dbh");
$s = $dbh->prepare("...");
我不会将对象定义为常量。 给定您的示例,您可以将其注入所需的位置。
function actorexists($pdo, $name) {
$s = $pdo->prepare("...");
}
function login($pdo, $name, $password) {
$s = $pdo->prepare("...");
}
function actorbyname($pdo, $name) {
$s = $pdo->prepare("...");
}
$dbh = new PDO("...");
$exists = actorexists($dbh, 'foo');
$foo = actorbyname($dbh, 'foo');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.