在线注册期间,客户可以选择他们选择注册的许多程序。这些程序是三位数的整数,并存储在数组中。
例如:
我想注册Programid 155、165、175和185。
我的数组设置很简单:
$data = array();
$data[] = 155;
$data[] = 165;
$data[] = 175;
$data[] = 185; 当需要将此信息插入关联表时,我还包括注册另一部分的其他元素:
例如,如果我正在执行一个SINGLE程序insert语句,它将看起来如下:
$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,我不太确定这是如何工作的,尤其是对于占位符(?)。
有什么建议么?
您可以以编程方式构建查询...:
$sql = 'INSERT INTO table (memberID, programID) VALUES '; $insertQuery = array(); $insertData = array(); foreach ($data as $row) { $insertQuery[] = '(?, ?)'; $insertData[] = $memberid; $insertData[] = $row; }
if (!empty($insertQuery)) { $sql .= implode(', ', $insertQuery); $stmt = $db->prepare($sql); $stmt->execute($insertData); }来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。