1

我创建了一个具有 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();
     }
}

}

4

4 回答 4

2

您返回 $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;
于 2013-06-22T10:40:35.683 回答
0

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

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

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

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

接下来是你使用mysqllib,而有更新的名为mysqli. 您也可以尝试使用 PDO 包装器。

于 2013-06-22T11:18:20.103 回答
0

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

 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();
     }
}
于 2013-06-22T10:42:42.217 回答
-1

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

public static function connect(){

}

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

Self::connect();
于 2013-06-22T10:54:01.863 回答