在PHP MVC中从控制器调用控制器?

在PHP MVC中从控制器调用控制器?,php,oop,model-view-controller,controller,Php,Oop,Model View Controller,Controller,我可以从帐户控制器呼叫管理面板控制器吗? 我的意思是,在账户控制器中,我设置了管理面板的可访问部分,我想将该变量和可访问的位置转移到管理面板控制器 现在我可以做以下事情了: <?php // Code here $this->panel = new Admin_Panel(); $this->panel->accessibleparts = $this->data['accessible']; ?> 或者在mvc规则中是不允许的?您的问题是mysq

我可以从帐户控制器呼叫管理面板控制器吗? 我的意思是,在账户控制器中,我设置了管理面板的可访问部分,我想将该变量和可访问的位置转移到管理面板控制器

现在我可以做以下事情了:

<?php

// Code here

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

?>


或者在mvc规则中是不允许的?

您的问题是
mysql\u real\u escape\u string()
需要一个连接(您已经建立了连接,只是没有使用mysql\u*命令子集)

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

$pdo = $conn->prepare('SELECT * FROM myTable WHERE theColumn = :myParam');
$pdo->bindParam(':myParam', $_GET['data']);
$pdo->execute();
我想你说的“呼叫”是指使用它

只需添加一个返回值,
return$db--这将在设置错误模式后的connect()结束时

现在


您的问题是
mysql\u real\u escape\u string()
需要一个连接(您已经建立了连接,只是没有使用mysql\u*命令子集)

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

$pdo = $conn->prepare('SELECT * FROM myTable WHERE theColumn = :myParam');
$pdo->bindParam(':myParam', $_GET['data']);
$pdo->execute();
我想你说的“呼叫”是指使用它

只需添加一个返回值,
return$db--这将在设置错误模式后的connect()结束时

现在


mysql\u real\u escape\u字符串替换为PDO或


由于
mysql\u real\u escape\u string
正在尝试使用
mysql\u connect
使用的最后一个打开的连接,因此会出现一系列错误(如中所述)。由于您使用的是PDO而不是mysql函数,因此没有连接,
mysql\u real\u escape\u string
正在抛出错误。

用PDO的或替换
mysql\u real\u escape\u string


由于
mysql\u real\u escape\u string
正在尝试使用
mysql\u connect
使用的最后一个打开的连接,因此会出现一系列错误(如中所述)。由于您使用的是PDO而不是mysql函数,因此没有连接,
mysql\u real\u escape\u string
抛出了一个错误。

手册中介绍了它的工作原理:

对上一个问题的回答:

您将得到以下错误:

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

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

然后你会问:

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

不用担心。你只是犯了一个小错误。错误在于您使用了函数
mysql\u real\u escape\u string
,而没有使用
mysql\u*
扩展的连接(注意:扩展,而不是数据库服务器)

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

这就是为什么第一个错误是连接失败,第二个错误是连接失败的结果-没有到数据库的链接,因此?
mysql\u real\u escape\u string
无法工作


为了解决这个问题,当您通过
PDO
使用mysql时,不要使用
mysql\u real\u escape\u string
。准备好的陈述就是你所需要的。

答案在手册中有关于它是如何工作的:

对上一个问题的回答:

您将得到以下错误:

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

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

然后你会问:

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

不用担心。你只是犯了一个小错误。错误在于您使用了函数
mysql\u real\u escape\u string
,而没有使用
mysql\u*
扩展的连接(注意:扩展,而不是数据库服务器)

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

这就是为什么第一个错误是连接失败,第二个错误是连接失败的结果-没有到数据库的链接,因此?
mysql\u real\u escape\u string
无法工作

为了解决这个问题,当您通过
PDO
使用mysql时,不要使用
mysql\u real\u escape\u string
。准备好的声明就是你所需要的。

类似这样的东西:

public function connect(){
    try {
        $db = new PDO('mysql:host=localhost;dbname=radiolev_db', 'radiolev_user', 'ceowwyso1');
一切都很好,但实际上并没有将数据库连接对象存储在对象中的任何位置。它只是该特定方法中的一个局部变量,当函数退出时将被销毁。e、 g.在连接时,一旦connct()方法返回,本地
$db
变量将超出范围,全新的数据库连接将关闭并销毁

您需要将$db存储在您自己的对象中,以便以后使用,例如:

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

正如上面其他人所说的,您不能将mysql_u3;()、mysqli_3;()和PDO连接相互混合。每个都是一个完全不同且独立的库(尽管它们都使用相同的底层mysql低级库)。在其中一个中建立的连接完全不可用