我有一个html页面,我从复选框中收集了一组值,并将其插入到数据库中。html页面发布到PHP页面,PHP页面收集数据,然后存储在数据库中。
对于每个值,我希望包括一些其他字段,这些字段对于所有值都是相同的,例如输入的时间。我可以使用implode轻松地将捕获的数组转换为逗号分隔的列表。我使用这样一个逗号分隔的I列表来更新和删除记录。但是,当我想要插入它们时,MYSQL似乎不允许您使用逗号分隔的列表。我的问题是,插入记录的最简单方法是什么,c逗号分隔列表中的每个值对应一条记录,而不使用循环。
html页面
<input type="checkbox" name="var[]" value=1>
<input type="checkbox" name="var{}" value=2>PHP页面
$vars = $_POST['var'];这给了我一个数组,我可以使用implode将其转换为逗号分隔的列表。
要删除,我可以去
$sql = "DELETE * from table WHERE id in '$vars'";要更新,我可以去
$sql = "UPDATE table, WHERE id in '$vars'";但是似乎没有对应的Insert。
以下是可行的方法:
$sql = "INSERT into table (var, timeentered) values (1,now()) (2,now())";然而,这不是我获得数据的方式。我想要做的事情是
$sql = "INSERT into table (var,timeentered) values($vars), now()",当然这是行不通的。
我必须将我的逗号分隔的列表转换成类似(1,now) (2,now())的形式来插入,还是有其他选择?
谢谢你的建议。
发布于 2013-01-31 08:26:18
不幸的是,您必须自己构建整个查询:
$sql ="insert into table (var, timeentered) values ";
$sql .= "(".implode(", now()), (", $vars).")";发布于 2013-01-31 08:24:23
我能想到两个选择。
按照您的建议构建一个动态插入查询。但是,不要每次都调用now(),只需插入一个日期(即
$time = gmdate();
$sql = "INSERT into table (var, timeentered) values (1,$time) (2,$time)";或者使用下面单个insert的预准备语句,关闭自动提交,启动事务并在for循环中执行所需插入次数的预准备语句,然后提交事务。
$sql = "INSERT into table (var, timeentered) values (?,?)"
发布于 2013-01-31 08:27:13
您需要遍历数据集并手动创建多行插入查询。如果要使用单个查询插入多行,则没有其他替代方法。这是在使用某些DB框架之外,这些框架可能会提供更好的接口来实现这一点。当然,归根结底,这样的DB框架本质上是在某个时刻手动构建多项插入查询。
这个问题可能会出现在你要插入多少个项目中的一个。如果您只打算一次插入几条记录,那么您可能希望考虑只对单独的插入使用预准备语句。但是,如果您打算一次插入数百条记录,这可能不是一个好主意。
https://stackoverflow.com/questions/14616363
复制相似问题