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を返さず、代わりにdbクラスで$thisを返しているように見えます。

于 2012-07-13T13:30:21.687 に答える