0

我可以从帐户控制器调用管理面板控制器吗?我的意思是在帐户控制器中我设置了管理面板的可访问部分,并且我想将该变量与可访问的位置转移到管理面板控制器。

现在我可以这样做吗:

<?php

// Code here

$this->panel = new Admin_Panel();
$this->panel->accessibleparts = $this->data['accessible'];

?>

还是在 mvc 规则中不允许?

4

4 回答 4

2

像这样的东西:

public function connect(){
    try {
        $db = new PDO('mysql:host=localhost;dbname=radiolev_db', 'radiolev_user', 'ceowwyso1');

一切都很好而且很花哨,但是您实际上并没有将该数据库连接对象存储在对象中的任何位置。它只是该特定方法中的局部变量,将在函数退出时被销毁。例如,您正在连接,然后一旦您的 connct() 方法返回,局部$db变量就会超出范围,并且您全新的数据库连接将关闭并销毁。

您需要将该 $db 存储在您的OWN对象中,以便将其保留以供以后使用,例如:

 $this->db = new PDO(...);

反而。

正如上面其他人所说,您不能将 mysql_ ()、mysqli_ () 和 PDO 连接相互混合。每个都是一个完全不同且独立的库(即使它们都使用相同的底层 mysql 低级库)。在其中一个库中建立的连接与其他库完全不同/独立/无法使用。由于您使用 PDO 进行连接,因此不能使用 mysql_ 函数,因为 mysql_ 不知道 PDO 中发生的任何事情。

于 2013-01-01T19:21:11.037 回答
1

您的问题是mysql_real_escape_string()需要连接(您已经建立了连接,只是没有使用 mysql_* 命令子集)。

使用 PDO 和实际准备好的语句,而不是你现在正在做的任何事情。

$pdo = $conn->prepare('SELECT * FROM myTable WHERE theColumn = :myParam');
$pdo->bindParam(':myParam', $_GET['data']);
$pdo->execute();

通过“呼叫”,我假设您的意思是使用它。

只需添加一个返回值,return $db;-- 这将在您的 connect() 的末尾,在设置错误模式之后。

现在

$db = new mysql();
$conn = $db->connect();
$conn->prepare('SELECT * FROM myTable WHERE myColumn = ?');
$conn->execute(array('test'));
于 2013-01-01T19:06:11.823 回答
1

答案在手册中阅读了它的工作原理:http: //php.net/oop5

回答你之前的问题:

您会收到以下错误:

警告:mysql_real_escape_string() [function.mysql-real-escape-string]:/home/radiolev/public_html/top/toplist.class.php 中的用户 'radiolev'@'localhost' 访问被拒绝(使用密码:否)第 10 行

警告:mysql_real_escape_string() [function.mysql-real-escape-string]:无法在第 10 行的 /home/radiolev/public_html/top/toplist.class.php 中建立到服务器的链接

然后你问:

我不明白为什么它会出现,因为 mysql 密码很好。

不用担心。你只是犯了一个小错误。错误是您mysql_real_escape_string在不使用扩展连接的情况下使用了该mysql_*功能(注意:扩展,而不是数据库服务器)。

如果您在没有建立mysql_*扩展数据库连接的情况下调用该函数,PHP 将根据 php.ini 中提供的设置自动创建一个。这通常只是主机设置为localhost - 但没有用户名和密码。

这就是为什么您看到第一个错误是连接失败而第二个错误是连接失败的结果 - 没有指向数据库的链接,所以?mysql_real_escape_string不能工作。

要解决这个问题,请不要mysql_real_escape_string在使用 mysql via 时使用PDO。准备好的报表就是您所需要的。

于 2013-01-01T19:08:11.987 回答
0

替换mysql_real_escape_string为 PDO 的报价bindValue

您会收到一堆错误,因为mysql_real_escape_string正在尝试使用最后一个打开的连接mysql_connect(如PHP 手册中所述)。由于您使用的是 PDO 而不是 mysql_* 函数,因此没有连接并mysql_real_escape_string引发错误。

于 2013-01-01T19:06:22.477 回答