$pdo->query($SQL);
用了之後,可以返回結果集,但是沒有欄位名,
當然用
$stmt->fetch( PDO::FETCH_ASSOC )
可以把數組的key當成欄位名,
但是除了欄位名,別的資訊都沒有,
請問有什麼方法像
object mysqli 的 $result->fetch_field()
一樣,可以看到欄位的全部資訊呢?
回複內容:
$pdo->query($SQL);
用了之後,可以返回結果集,但是沒有欄位名,
當然用
$stmt->fetch( PDO::FETCH_ASSOC )
可以把數組的key當成欄位名,
但是除了欄位名,別的資訊都沒有,
請問有什麼方法像
object mysqli 的 $result->fetch_field()
一樣,可以看到欄位的全部資訊呢?
PDO是PDO, Mysqli是Mysqli,我們沒辦法要求PDO像Mysqli保持一樣的結構和設計。
也許你會覺得mysqli的fetch_field很方便,但是實際上這個方法的使用機率極低,因為通常會讀出表的所有欄位資訊並緩衝起來,而不是總是進列欄位查詢。
表現最明顯的架構如Cakephp,當你用直接編輯資料表的方法增加了一個新欄位之後資料並不會被儲存到這個欄位中,必須先清除緩衝的資料表資訊才行。
通過閱讀不同的PHP架構,我們可以發現極少會有架構需要開發人員直接調用PDO或者mysqli對象去執行sql,它們往往將其通過DbAdapter之類的介面進行封裝。我建議你思考這樣做的好處然後最佳化自己的代碼結構。
你問題中的這個行為通常也不需要封裝在db對象中,一般是在Table對象處理,例如
class Table { protected $_tableName; public function __construct($tableName); protected function _readFieldsPrototype(); protected function _getCachedFieldsPrototype(); public function getFieldPrototype($filed);}
僅供參考。
sql= "SHOW COLUMNS FROM `your_table`"
返回的結果集就是your_table 的所有欄位 還有TYPE 等