2013-05-30 51 views
0
$tconn = new PDO('mysql:host='.WW_HST.';dbname='.WW_DB, WW_USR, WW_PS); 
$res = $tconn->prepare('SELECT * FROM :tbl'); 
$res->execute(array(':tbl'=>"ugb")); 

當我使用此代碼從「UGB」表中提取數據,我得到以下錯誤:準備synatax錯誤SQLSTATE [42000]

'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''ugb'' at line 1'

所以它的正確代:tbl爲「上消化道出血」但是不管我做一個綁定還是隻是用一個數組執行,我總是會得到一個錯誤。它工作正常,但我只是做SELECT * FROM ugb

我該如何解決這個問題?

回答

2

PDO不允許您在FROM中設置變量。

您只能在查詢字符串中添加表名。

我通常這樣做:

$allowedTables = array('first', 'second', 'third'); 
if(in_array($tblName, $allowedTables)) { 
    $$res = $tconn->prepare("SELECT * FROM $tblName"); 
} 
-2

我不認爲PDO將允許您將參數綁定到FROM語句。你可以嘗試手動轉義表名參數,然後將其添加到這樣的查詢:

$table = "ugb"; 
$tconn = new PDO('mysql:host='.WW_HST.';dbname='.WW_DB, WW_USR, WW_PS); 
$res = $tconn->prepare('SELECT * FROM '. $tconn->quote($table)); 
$res->execute(); 

希望這會有所幫助。

+0

這是一個可怕的。請閱讀手冊頁上對您建議的功能的評論。 –

+0

是的你是對的,但在這種情況下它可能有助於某種目的。 – lexmihaylov

相關問題