我有这个查询,
$cellId = $db->insert_multiple_data("INSERT INTO tbl_attendance",
array('tbl_worksheets_id','tbl_students_id','status','class_dt'),
$values_array);
$ values_array的位置,
$values_array[] = array($id1,$id2,$status,$datetime);
它在for循环中。
现在是我的insert_multiple_data(),
public function insert_multiple_data($sql,$fields,$values_array){
$set = '';
$str = "";
$comma_separated2 = implode(",", $fields);
foreach($values_array as $values){
$comma_separated = implode("','", $values);
$comma_separated = "'".$comma_separated."'";
$str = $str."(".$comma_separated."),";
}
$sql = $sql."(".$comma_separated2.") VALUES ".rtrim($str, ",");
$stm = $this->conn->prepare($sql);
$stm->execute();
return $this->conn->lastInsertId();
}
所以上面这些代码正在运作。我需要的是使状态为id,如何从数据库中选择状态(字符串)的id?然后插入上面的查询?
答案 0 :(得分:1)
请在此处查看此答案:MySQL LAST_INSERT_ID() used with multiple records INSERT statement
这是不可能的,因为MySQL旨在能够与复制一起工作。如果可以从长插入返回多个ID,则可能使该过程不确定。 (所以它总是只返回第一个)
另一件事:您的代码不安全(来自SQL注入攻击)。它使用预准备语句,但不使用参数。这些值只是插入到字符串中。要么使用带参数的预处理语句,要么使用mysqli :: real_escape_string进行转义。 (如果DB连接和PHP环境都设置为相同的编码,则转义只是安全的,例如UTF-8。)