【问题标题】:call a function class php调用函数类php
【发布时间】:2013-06-19 10:37:35
【问题描述】:

我创建了一个具有 2 个函数的类,这些函数处理与数据库的连接并进行查询。其中一个调用另一个。 这是我的代码,但它给了我错误....调用函数时肯定有问题。 谁能帮帮我?

class DB{

public function connect(){
    session_start();
    include_once('libs/Smarty.class.php');
    $smarty = new Smarty();
    $smarty->setTemplateDir('templates/');
    $smarty->setCompileDir('templates_c/');
    $smarty->setConfigDir('configs/');
    $smarty->setCacheDir('cache/');

    $host = "localhost";
    $user = "root";
    $pass = "pass";
    $tablename = "table";

    return $connect = mysql_connect($host, $user, $pass);
    mysql_select_db($tablename, $connect) or die(mysql_error());
}

public function do_query($query){
    echo DB::connect();
     if(mysql_query($query,DB::connect())){
         $message="Annuncio inserito correttamente!!";
         echo $message;
     }else{
         $message="Error insert data into DB: ";
         echo $message. mysql_error();
     }
}

}

【问题讨论】:

  • 如果你使用静态类,试试 self::connect

标签: php class function return


【解决方案1】:

您返回 $connect ...但您可能想要返回 mysql_select_db

$connect = mysql_connect($host, $user, $pass);
return mysql_select_db($tablename, $connect) or die(mysql_error());

编辑:

我的回答是“肯定有问题……”,因为最后一条语句没有执行是一个明显的错误。

但是如果你想使用连接你需要返回它,当然!

$connect = mysql_connect($host, $user, $pass);
mysql_select_db($tablename, $connect) or die(mysql_error());
return $connect;

【讨论】:

  • mysql_select_db 不返回连接
  • @DevZer0,他正在纠正 OP 的错误。 OP 正在返回连接,但它从未有机会选择数据库。
  • 它不能解决问题
  • 它允许函数connect()选择数据库。它不再依赖 mysql 连接了......
  • 而且 mysql_select_db 是否返回流并不重要。它不需要。这是一个命令,而不是一个连接。它将返回 True/false。
【解决方案2】:

有一些设计错误,您的模板逻辑应该在数据库连接方法之外。除此之外,还需要进行以下更改

 class DB {

    private $host = "localhost";
    private $user = "root";
    private $pass = "pass";
    private $tablename = "table";
    private $con = null; //change here

public function connect(){
    $this->con = $connect = mysql_connect($this->host, $this->user, $this->pass); change here
    mysql_select_db($this->tablename, $this->con) or die(mysql_error()); //should be database name
 }

public function do_query($query){
 if(mysql_query($query,$this->con)){ //notice the change in this line 
         $message="Annuncio inserito correttamente!!";
         echo $message;
     }else{
         $message="Error insert data into DB: ";
         echo $message. mysql_error();
     }
}

【讨论】:

    【解决方案3】:

    首先,放在return 之后的代码没有执行。这从未使用过:

    mysql_select_db($tablename, $connect) or die(mysql_error());
    

    所以永远不会选择数据库。

    其次,您每次查询都会连接到数据库两次,而整个 http 请求应该连接一次。

    接下来,你使用mysql lib,而有一个更新的名为mysqli。您也可以尝试使用 PDO 包装器。

    【讨论】:

      【解决方案4】:

      您正在调用 DB::connect() 这是静态函数,您需要将其声明为静态,例如

      public static function connect(){
      
      }
      

      如果你想在课堂上调用它,你必须这样做

      Self::connect();
      

      【讨论】:

      • 这不是这里的问题
      • 您可以在 PHP 中静态调用动态方法,请自行测试是否报错
      猜你喜欢
      • 2012-09-26
      • 1970-01-01
      • 2013-03-08
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多