您好我有一个代码,他们用它来连接数据库
$db= DAL::get_instance();
$count=$db->read_single_column("select count(id) from ".TABLE_PREFIX."users where email=? and status=1", array($email));
echo "Aqui".$count;
我为该网站创建了一个空白的新页面,但我认为$db= DAL::get_instance();
不起作用..我不想创建多个数据库连接,所以我如何在PHP上使用DAL以便我可以使用相同的链连接...
DAL在哪里以及如何设置? (我如何搜索设置的字符串,格式是什么)
由于
我在库核心上找到了一个DAL.php ..但是它是用Ioncube编写的..所以我的猜测是我无法看到如何设置:(
答案 0 :(得分:2)
您的DAL
类是用户空间定义的 - PHP中没有这样的东西。将它的整个代码发布到某个地方,有人可能会告诉你如何处理它。
static::get_instance()
并提到您无法触发多个实例,这表明您的数据库抽象层实际上是Singleton。这很好,然后再次,这是非常糟糕的。 Singleton的整个目标是将类限制为一个实例仅,这对于数据库层来说非常好。
但是,在您的情况下,您似乎希望同时连接到多个DB。根据代码的编码方式,您可以在几乎不修改代码的情况下执行此操作。
供参考,这是您的DAL的简化版本:http://codepad.viper-7.com/gPQ8bo。我保留了你所关注的部分并剥夺了其他所有东西。
撕掉单例并开始使用依赖注入。
您可以使用Reflection
重置Singleton的私有静态成员。 这是一个黑客,所以只有在必要时才使用。
这方面的小提琴在于:http://codepad.viper-7.com/ja6zHL。代码如下:
$reflection = new \ReflectionProperty('MySingleton', 'instance'); // Get a handle to the private self::$instance property
$reflection->setAccessible(true); // Set it to public
$reflection->setValue(null, null); // Modify it
// Optional: re-restrict it
$reflection->setAccessible(false);
请注意,这有三个原因:
Reflection
,它具有非常大的性能影响