【发布时间】:2011-06-05 11:13:40
【问题描述】:
在在线注册期间,客户可以选择他们选择注册的多个计划。这些程序是三位整数,并存储在一个数组中。
例如:
我想注册 programid 155、165、175 和 185。
我的数组设置很简单:
$data = array();
$data[] = 155;
$data[] = 165;
$data[] = 175;
$data[] = 185;
当需要将此信息插入关联表时,我还包括来自其他注册部分的其他元素:
例如,如果我正在执行 SINGLE 程序插入语句,它将如下所示:
$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, 155));
我通常会为上面的数组创建一个简单的循环,它会调用 sql 语句的多个实例并执行如下:
for($j = 0; $j < (count($data)-1); $j++) {
$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, $data[$j]));
}
我确实意识到上面的代码是无效的 ( $data[$j] ) 但正在寻找正确的方法来进行调用。
我之前也被告知,构建单个动态 sql 语句总体上比像上面的多个调用要好。我的第一遍是这样的:
$sql = array();
foreach( $data as $row ) {
$sql[] = '("'.$memberid.'", "'.$row[$j].'", NOW()")';
}
mysql_real_query('INSERT INTO table (memberid, programid) VALUES '.implode(',', $sql));
但是对于 PDO,我不太确定它是如何工作的,尤其是对于占位符 (?)。
有什么建议吗?
【问题讨论】:
-
不要多次运行准备。它已准备好,您可以使用不同的值多次执行它。