如何在多个数据的插入查询中选择id来使用它?

时间:2016-10-12 09:57:41

标签: php mysql

我有这个查询,

$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?然后插入上面的查询?

1 个答案:

答案 0 :(得分:1)

请在此处查看此答案:MySQL LAST_INSERT_ID() used with multiple records INSERT statement

这是不可能的,因为MySQL旨在能够与复制一起工作。如果可以从长插入返回多个ID,则可能使该过程不确定。 (所以它总是只返回第一个)

另一件事:您的代码不安全(来自SQL注入攻击)。它使用预准备语句,但不使用参数。这些值只是插入到字符串中。要么使用带参数的预处理语句,要么使用mysqli :: real_escape_string进行转义。 (如果DB连接和PHP环境都设置为相同的编码,则转义只是安全的,例如UTF-8。)