2

我想知道为什么我会收到该代码错误?有人可以帮忙吗?我的课是使用嵌套方法从数据库中获取一些信息,假设我得到一个空查询

<?php
class db {
 public function __construct(){
 if(mysql_connect("localhost","root","0000")){
     mysql_select_db("myblog");

 }else{
     echo mysql_error();
 }

 }

   public function select($row){
      $sql="SELECT".$row;
      return $this;
   }

   public function from($table){
      $sql.="FROM".$table;
      return $this;
   }

   public function where($condition){
     $sql.="WHERE".$condition;
      return $this;
   }

}
$ddb=new db;
$qq=$ddb->select("*")->from("news")->where("id='1'");
$query=  mysql_query($qq);
while($row=mysql_fetch_object($query)){
    echo $row->title;
}
?>
4

4 回答 4

1

您必须定义 __toString() 特殊方法才能将对象用作字符串:

class db {

    private $sql = '';

    public function __construct() {
        if (mysql_connect("localhost", "root", "0000")) {
            mysql_select_db("myblog");
        } else {
            echo mysql_error();
        }
    }

    public function select($row) {
        $this->sql = "SELECT ".$row;
        return $this;
    }

    public function from($table) {
        $this->sql .= " FROM ".$table;
        return $this;
    }

    public function where($condition) {
        $this->sql .= " WHERE ".$condition;
        return $this;
    }

    public function __toString() {
        return $this->sql;
    }

}

$ddb = new db();
$qq = $ddb->select("*")->from("news")->where("id='1'");
$query = mysql_query($qq);
while ($row = mysql_fetch_object($query)) {
    echo $row->title;
}
于 2012-07-13T13:33:14.083 回答
1

您需要$this在每种方法中使用才能附加到$sql

   // Declare the class property
   public $sql = "";


   // And use $this->sql in the methods
   // Also note whitespace added around SELECT, FROM, WHERE
   public function select($row){
      $this->sql="SELECT ".$row;
      return $this;
   }

   public function from($table){
      $this->sql.=" FROM ".$table;
      return $this;
   }

   public function where($condition){
     $this->sql.=" WHERE ".$condition;
      return $this;
   }

然后,当您查询它时,请使用$ddb->sql,因为您没有返回 SQL 字符串。

$ddb->select("*")->from("news")->where("id='1'");
$query = mysql_query($ddb->sql);

不用说,希望您打算调用mysql_real_escape_string()您在方法中构造的任何变量where()。事实上,你没有特别逃避它。

于 2012-07-13T13:28:31.110 回答
0
  • 在方法中使用而$this->sql不是,$sqlselectfromwhere
  • 像这样输出查询:$ddb->select("*")->from("news")->where("id='1'")->sql或者创建一个getSQL()只返回该$sql字段的方法并像这样查询它$ddb->select("*")->from("news")->where("id='1'")->getSQL()

您还应该考虑创建一个方法来创建一个mysql_query(不仅仅是字符串)或一些用于检索方法的方法,因此它更易于使用。

于 2012-07-13T13:32:28.067 回答
0

在 $qq 上运行 var_dump

这将立即向您显示问题。

在我看来,您的查询中好像缺少几个空格,并且您没有返回查询字符串 $sql 而是在您的数据库类中返回 $this

于 2012-07-13T13:30:21.687 回答