比如在一個資料表中有一個字段叫order,是專門用來做排序的,我的語句可能要這麼寫$sth = $pdo->prepare('SELECT * FROM table_name ORDER BY order ASC');
$sth->execute();
但是因為order本身是一個關鍵字,那麼在執行的時候就會報syntax錯誤,我知道在pdo裡對字段可以用:column_name來動态綁定,它會自動處理引号等問題,也可以用$pdo->quote來轉義字元串,但是對字段名和表名卻沒有方法來轉義。
這種轉義在不同的資料庫系統裡是一樣的,比如在mysql裡SELECT * FROM table_name ORDER BY `order` ASC
而在sqlite裡SELECT * FROM table_name ORDER BY "order" ASC
有沒有一種通用而又省事的辦法來處理這個問題呢更新
根據答案最後總結出一種通用的轉義方法$escapes = array(
'mysql' => array('`', '`'),
'mssql' => array('[', ']')
);
$driver = $db->getAttributes(PDO::ATTR_DRIVER_NAME);
$escape = isset($escapes[$driver]) ? $escapes[$driver] : array('"', '"');
$field = $escape[0] . $field . $escape[1];