2013-03-12 28 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