2013-03-12 20 views
0

我想要插入與$add_rows = $_POST['add-rows']中的數字一樣多的行到一個表中。對於我現在的工作,我需要32行。我怎樣才能讓SQL VALUES部分成爲一個循環,以便輸入32行?php mysql插入一個查詢的多個行的X個號碼

這是我以下表格

<form> 
<input name="add-name" id="add-name" type="text" value=""> 
<input name="add-start" id="add-start" type="text" value=""> 
<input name="add-end" id="add-end" type="text" value=""> 
<input name="add-rows" id="add-rows" type="text" value=""> 
<input name="add-submit" id="add-submit" type="submit" value="Add" /> 
</form> 

是我會從形式發佈的價值觀,價值觀的其餘部分可以setas NULL

$add_name = $_POST['add-name']; 
$add_start = $_POST['add-start']; 
$add_end = $_POST['add-end']; 
$add_rows = $_POST['add-rows']; //in this case, the value is 32 

這是查詢...我需要輸入32個VALUES。

mysql_query("INSERT INTO table position, name, start, end, code, one, two, three, four, five, six) 
VALUES (NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL)") 
or die(mysql_error()); 
+2

作爲備註:不要再使用'mysql_ *'函數,而應考慮切換到MySQLi或PDO。 – 2013-03-12 16:56:35

+1

您的SQL語句中有語法錯誤(表名後缺少括號) – 2013-03-12 17:08:57

回答

1

這應該會給你32行。

$sql = "INSERT INTO table (position, name, start, end, code, one, two, three, four, five, six) 
VALUES (NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL)" 
    . str_repeat(", (NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", $add_rows - 1) 
mysql_query($sql); 
+0

謝謝。它工作,但由於某種原因,它插入一個額外的空白行..? – Azukah 2013-03-12 17:45:08

0

你可以試試這個

mysql_query("INSERT INTO table position, name, start, end, code, one, two, three, four, five, six) 
VALUES (NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL), 
(NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL), 
(NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL), 
(NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL)") 
or die(mysql_error()); 

這裏有只有4行,但你不能32條線做。

你也可以在循環中構造請求(設置不同的變量值) 不要忘記每個值的逗號(但最後一行末尾沒有逗號)。

0

使用PDOprepared statement一起:

$dbh = new PDO('mysql:host=localhost;dbname=example', $user, $pass); 
$stmt = $dbh->prepare("INSERT INTO table (position, name, start, end, code, one, two, three, four, five, six) VALUES (NULL, :add_name, :add_start, :add_end, NULL, NULL, NULL, NULL, NULL, NULL, NULL)"); 
$stmt->bindParam(':add_name', $add_name); 
$stmt->bindParam(':add_start', $add_start); 
$stmt->bindParam(':add_end', $add_end); 

for ($i = 0; $i < $add_rows; $i++) { 
    $stmt->execute(); 
} 

這具有對SQL注入攻擊強化您的查詢的好處。你的問題和其他答案(在撰寫本文時)直接在查詢中使用未轉義的$ _POST值。

+0

我有使用PDO的問題。我想嘗試一下,但是每次我使用它時,都會發生一些事情。謝謝,雖然。 – Azukah 2013-03-12 17:45:53

0

列名稱需要在括號之間。我想你需要看的語法:

INSERT INTO table_name (column1, column2, column3,...) 
VALUES (value1, value2, value3,...) 

我認爲這是一個問題的答案&網站不給我這個語法點。 @Azukah看看這個學習的語法。如果你只是想要的語法,檢查其他答案。

:)

+0

對於語法感到抱歉。重新輸入時我搞砸了。將仔細檢查b4張貼。謝謝! – Azukah 2013-03-12 17:44:50

+0

@Azukah好吧,祝你好運。 :) – 2013-03-12 18:05:45