在在线注册期间,客户可以选择多个课程以进行注册。这些课程是三位数的整数,并存储在一个数组中。
例如:
我想要注册编号为155、165、175和185的课程。
我的数组设置如下:
$data = array();
$data[] = 155;
$data[] = 165;
$data[] = 175;
$data[] = 185;
在将这些信息插入关联表时,我还需要包括来自注册的其他部分的附加元素:
例如,如果我正在执行单个程序插入语句,则如下所示:
$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,我不太确定它的工作方式,特别是占位符(?)。
有什么建议吗?