一次性在数据库中插入多条数据

4
我有一段代码,可以将我选择的日期插入到数据库中。但是这个代码只能插入一个值,而不是所有的值,就好像它在第一个值处停止了。
请问我做错了什么?
谢谢!
$job_id=$_REQUEST['job_id'];

$dates = explode(",", $_POST['altField']);
foreach($dates as $date){
$sql="INSERT INTO date (job_id,date) VALUES('$job_id','$date')";
mysql_query($sql);
}

$job_id是什么?它是你的表的主键吗? - Muhammad Zeeshan
“date” 表的定义是什么?“job_id” 可能是一个主键列吗? - mellamokb
$job_id是从一个输入传递过来的数据,其格式类似于9/10/29、9/10/2011等。 - blerta
3
请注意,您的代码中不应使用mysql_*函数。这些函数不再维护并且被弃用。相反,您应该使用MySQLiPDO。不知道应该使用哪个?这篇文章应该会有所帮助。 - Jonah Bishop
3个回答

1
$job_id=$_REQUEST['job_id'];

$dates = explode(",", $_POST['altField']);
$values_arr = array();    
foreach ($dates as $date) {
    $values_arr[] = "('" . $job_id . "','" . $date . "')";
}
$values = implode(", ", $values_arr);

$sql="INSERT INTO date (job_id,date) VALUES $values";
mysql_query($sql);

我试图通过编辑你的回答来帮助你,但你拒绝了我的更正。我不得不在你修正答案之前先在这里发布我的原始回复。对此我很抱歉。 - Ghassan Elias
你试图完全重写我的问题...而且不仅仅是我拒绝了它。 - bretterer

0
$job_id=$_REQUEST['job_id'];

$dates = explode(",", $_POST['altField']);
foreach($dates as $date){
    $values .= '("'.$job_id.'","'.$date.'"),';
}
$sql="INSERT INTO date (job_id,date) VALUES " . substr($values, 0, -1);
mysql_query($sql);

插入可以有多个值集,所以您只需要在foreach中设置值,然后在其外部执行查询。您也可以这样做并获得相同的结果,

$job_id=$_REQUEST['job_id'];

$dates = explode(",", $_POST['altField']);
foreach($dates as $date){
    $values[] = '("'.$job_id.'","'.$date.'")';
}
$sql="INSERT INTO date (job_id,date) VALUES " . implode(',',$values);
mysql_query($sql);

提醒

始终对输入进行消毒处理。不这样做可能会导致SQL注入,给您带来重大问题。请参考this。此外,mysql已不再维护,建议切换到MySqli或PDO。


从技术上讲,这有什么不同,即为什么它比原始方法更有可能起作用?如果您阅读了 OP 的第一句话,他们的问题不是想一次性插入所有值。问题在于当前代码只插入了第一个值。 - mellamokb
1
你的想法是对的,但多行插入应该用逗号分隔。将$values定义为数组,在最后使用implode()函数。 - Niet the Dark Absol
如果你看一下,它被逗号分隔开了。我正在更新代码,以删除最后一个逗号。 - bretterer
你的代码有很多错误,我已经编辑了它,但你又把它改回去了。 - Ghassan Elias
嘿,谢谢!问题在于它说附近使用了错误的语法 implode(',',array)。 - blerta
显示剩余4条评论

-1

尝试:

$sql = "INSERT INTO date SET job_id='".$job_id."', date='".$date."'";
mysql_query($sql);

1
你把INSERTUPDATE语法结合在一起了,这是完全错误的... 编辑:太棒了!不用管它,对于MySQL来说是正确的! 对此我很抱歉。 - mellamokb
哦,但我经常使用它并且它有效,也许我应该改变它。谢谢你的建议。 - Stefan Gi
@Touki:哎呀,每天都有新的学习 :) 好吧,我撤回我的踩了,但这不是标准的 T-SQL,并且实际上并没有解决问题。大多数人(包括我)会有一种直觉反应,因为我们成长于“INSERT INTO VALUES (...)”和“UPDATE SET ..”作为标准语法,这在几乎所有 RDBMS 中都适用。 - mellamokb
即使它能工作...这仍然为每个查询执行一次查询..上面的示例为所有查询执行一次查询。 - bretterer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接