天天看點

mysql 表名轉義_PDO如何處理SQL語句中對字段名以及表名的轉義

比如在一個資料表中有一個字段叫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];