2014-01-20 153 views
-2

我想在我的插入查詢中使用變量(例如$ table)而不是'categories'witch是我的表的名稱。我已經閱讀了一些關於「準備」的內容,但是一點都不明白,我怎麼能用我的代碼來完成。有人可以幫助我解決這個問題嗎?構建動態INSERT查詢

$sql = 'INSERT INTO categories (name, description) VALUES ("' . $_POST['name'] . '", "' .  $_POST['description'] . '")'; 

如果它很重要的表名會作爲一個函數參數:)

回答

2

你可以再次使用一個變量:

$table_name = 'categories';//or other table 
$sql = 'INSERT INTO '.$table_name .' (name, description) VALUES ("' . $_POST['name'] . '", "' .  $_POST['description'] . '")'; 
+0

我想,如果所有表具有相同的列(名稱),它只會工作。 – prograshid

+0

是的,但是OP問表名動態@SeaSharp –

0

我會建議你做這樣的事情:

$name = mysql_real_escape_string($_POST["name"]); 
$description = mysql_real_escape_string($_POST["description"]); 

$query = "INSERT INTO {$table_name} ("; 
$query .= "name, description"; 
$query .= ") VALUES ("; 
$query .= " '{$menu}', '{$description}' "; 
$query .= ")"; 
$result = mysql_query($query); 

使用mysql_real_escape_string()只是爲了安全起見,它只是轉義特殊字符一個用於SQL語句的字符串。

0

我不認爲你可以用prepare語句做動態表名;作爲準備語句需要知道表被查詢,提前: http://www.php.net/manual/en/pdo.prepare.php

不過,我會強烈建議對數據庫交互的PDO方法,因爲它有助於防止SQL注入..直接從$ _ POST獲取價值纔不是。

所以,我建議:

$db = new PDO('mysql:host='.$host.';dbname='.$dbname, $username, $password); 
$db->prepare('INSERT INTO '.$table.' (name, description) VALUES (:name, :description);'); 
$db->bindParam(':name', $_POST['name']); 
$db->bindParam(':description', $_POST['description']); 
$db->execute(); 

這是假設表中有相同的列,表已被設置爲變量$表。

PDO提供了更多的優勢.. http://www.php.net/manual/en/class.pdo.php