2012-11-29 29 views
2

嘿傢伙我想用一個php變量作爲我創建查詢的一個mysql表的名稱的一部分。我使用了兩種類型的引號,就像我在互聯網上看到的一個例子。它應該創建一個單獨的表名。 $cn不是一個數組,它是單個值。我已啓用PHP錯誤報告,並沒有顯示任何錯誤。這是我試過的:在mysql的名字中使用php變量創建表

$sql2 = "CREATE TABLE lm_Warenkorb_`".$cn."` 
    (
    Index TEXT, 
    )"; 

爲什麼不能正常工作?這是否可能?希望很清楚我想要做什麼。

+1

就在這裏瞎猜。 ..但是你的數據庫用戶有'create'特權嗎? – Lix

+0

代碼對我來說看起來很好 – lawl0r

回答

3
$sql2 = "CREATE TABLE `lm_Warenkorb_".$cn."` 
    (
    Index TEXT, 
    )"; 
+0

如果'$ cn'來自用戶輸入,則還應確保'$ cn'不包含任何反引號或其他非法字符,否則可能會發生SQL注入攻擊。 – SDC

+0

對我來說不起作用,但它沒有出現 – Alesfatalis

+0

@SDC回答根據** Pgr456 **代碼給出,假設所有檢查都已完成 – triclosan

2

我想你會需要在反引號包住整個表名稱...

$sql2 = "CREATE TABLE `lm_Warenkorb_{$cn}` 
    (
    Index TEXT, 
    )"; 

您也可以用花括號變量插入到封裝用雙引號的字符串。

+1

如果'$ cn'來自用戶輸入,你還應該確保'$ cn'不包含任何反引號或其他非法字符,否則可能會發生SQL注入攻擊。 – SDC

+0

@SDC - 當然。在任何情況下,都應該注意清理任何**用戶提交的數據,這些數據將在以後保存/使用。 – Lix

+1

是的。我想我的觀點是,它需要與插入到SQL語句中的大多數其他字符串進行不同的消毒處理。當您擁有動態的表名和字段名時,標準的衛生方法是沒有用的,但做衛生設施同樣重要。 – SDC

2

你的代碼將產生字符串:

CREATE TABLE lm_Warenkorb_`some_string`(Index TEXT,) 

我認爲它必須是2點的變體:

CREATE TABLE `lm_Warenkorb_`.`some_string`(Index TEXT,) 

或者

CREATE TABLE `lm_Warenkorb_some_string`(Index TEXT,)