2013-08-28 83 views
0

我剛開始玩PDO,我試圖創建一個函數來顯示給定表名的所有數據。在閱讀了幾篇文章後,我發現了一個解決方案,我可以開始工作(下面用硬編碼的select語句顯示)。然而,當我綁定我的字段名稱時,我無法讓我的execute語句正常工作(我得到的異常類似於:Undefined index:person_id)。我應該提及我的類擴展PDO:PHP - (PDO)使用綁定變量執行

/********************************************************************* 
*Function showTable 
*Purpose Display all information for a given table. 
*Params $sTable -> Table name 
********************************************************************/ 
public function showTable($sTable) 
{ 
    $result; 

    try 
    { 
     if(isset($sTable)) 
     { 
      //create a result in a table format 
      $result = "<table>"; 
      //$stmt = $this->prepare('DESCRIBE :sTable'); 
      $stmt = $this->prepare('DESCRIBE ' . $sTable); 

      //$stmt->bindParam(':sTable', $sTable); 
      $stmt->execute(); 

      //array version of the column names 
      $aCols = $stmt->fetchAll(PDO::FETCH_COLUMN); 
      //string version of the column names 
      $sCols = implode (", ", $aCols); 

      //$stmt = $this->prepare('SELECT :fields FROM :sTable'); 
      //$stmt = $this->prepare('SELECT :fields FROM person'); 
      $stmt = $this->prepare('SELECT person_id, first_name, last_name FROM person'); 

      //$stmt->execute(array(':fields'=>$sCols, 'stable'=>$sTable)); 
      //$stmt->execute(array(':fields'=>$sCols)); 
      $stmt->execute(); 

      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
      { 
       var_dump($row); 
       $result = $result . "<tr>"; 
       foreach($aCols as $col) 
       { 
        //var_dump($row); 
        $result = $result . " <td>" . $row[$col]. "</td>"; 
       } 
       $result = $result . "</tr>"; 
      } 
      $result = $result . "</table>"; 
     } 
     return $result; 
    } 
    catch(PDOException $e) 
    { 
     if($this->bDebug) 
     { 
      echo $e->getMessage(); 
     } 
    } 
} 

就像我說的硬編碼的選擇string作品,但是當我註釋掉硬編碼,並取消它引發異常綁定的執行。

回答

1

您不能以這種方式插入標識符或關鍵字。

PDOStatement :: execute()會將轉義形式的值放在單引號內。您的查詢如下所示:

SELECT 'col1, col2' FROM person 

什麼是無效的MySQL語法。

有效例如:

$stmt = $this->prepare('SELECT col FROM person WHERE name = :name'); 
$stmt->execute(array(':name' => $name)); 

它的工作原理,因爲它是你在這裏插入一個值;而不是關鍵字或標識符。

+0

哦,我現在明白了。非常感謝你。我會盡快設置爲可接受的答案。 – Travis

+0

有了這些信息,我按照我想要的方式工作,再次感謝 – Travis