2011-09-15 31 views
0

我有這個功能SQL選擇不PHP工作,但確實MySQL服務器本身

public function populate($id) { 
    $pdo = new PDOConfig(); 

    $sql = "SELECT * FROM ".$this->table." WHERE `id` = :id"; 

    $q = $pdo->prepare($sql); 
    $q->execute(array(":id"=>$id)); 
    $resp = $q->fetchAll(); 
    foreach ($resp as $row) { 
     foreach ($row as $key=>$value) { 
      if(!is_int($key)) 
       $this->$key = html_entity_decode($value, ENT_QUOTES); 
      if($value == null) { 
       $this->$key = null; 
      } 
     } 
    } 

    $pdo = null; 
    unset($pdo); 
} 

其中一期工程上。 當我試圖讓

$sql = "SELECT * FROM ".$this->table." WHERE `id` = :id"; 

$sql = "SELECT * FROM ".$this->table." WHERE `id` = :id AND `life` > 0"; 

它打破。當我在終端的sql中運行這個函數時,所有的都可以正常工作。該表具有現場生活,並確保查詢應該工作。我錯過了什麼?

感謝

+4

「It break」。你遇到了什麼錯誤? –

+0

很好的問題,奇怪的是,沒有。它更多的是在SQL本身內解析。如果我print_r $ resp,它只是中途解析並打破腳本。 – willium

+0

我沒有使用mysql_connect ... – willium

回答

3

您還沒有張貼在這裏既不是你的PHP代碼,也沒有$id變量的值來產生真正的SQL查詢。這讓我覺得你沒有真正檢查過它們。所以當你說«我在終端裏運行sql中的這個函數,但是所有工作都很好»你可能指的是你打算創建的SQL查詢。因此,問題是您的PHP代碼不會發送您認爲它的查詢和值。

故障排除步驟:

$q->execute(array(":id"=>$id));
  1. 權,檢查的$sql$id值。您可以使用var_dump()或您選擇的調試器。在第一種情況下,不要相信你的瀏覽器渲染視圖;而是使用查看源文件菜單。

  2. 將這些值與預期結果進行比較。

  3. 確保您的PDO子類捕獲錯誤。最簡單的方法是故意製造SQL語法錯誤,如XSELECT * FROM

相關問題