2013-07-21 47 views
0
$dbh = new PDO('mysql:host=' . $_POST['db_host'], $_POST['db_user'], $_POST['db_user_password']); 
$sql = 'CREATE DATABASE :db_name'; 
$sth = $dbh->prepare($sql); 
$sth->bindParam(':db_name', $_POST['db_name']); 
var_dump($sth->execute()); 

這是總是顯示錯誤。但是,如果直接指定db_name,如下所示:預印記錄中無法使用標記

$sql = 'CREATE DATABASE database'; 
$sth = $dbh->prepare($sql); 
$sth->execute(); 

它會工作。我做錯了什麼?

+3

只能綁定值,而不是標識符。 – mario

+0

我喜歡這個答案:http://stackoverflow.com/questions/11312737/can-i-parameterize-the-table-name-in-a-prepared-statement –

回答

3

只能綁定參數化查詢中的數據(列值),而不能列名稱和表名。此外,在你的代碼中,你試圖參數化連接初始化,我認爲這是不正確的。

您也可以依賴於數據庫名稱的白名單:

$databases = array('dbone', 'dbtwo'); 

然後檢查

if(in_array($_POST['db_name'], $databases)){ 
    $dbname = $_POST['db_name']; 
}