对数组使用“重复键更新”


Using On Duplicate Key Update with an array

我对MYSQL比较陌生,我很难结合我读过的想法。我有一个从查询生成的表单。我希望能够插入或更新取决于是否有当前匹配的行。我有以下用于插入的代码,但我正在与On DUPLICATE UPDATE部分作斗争,我不断收到一条消息,说我的语法中有错误或意外的On,这取决于我如何放置'。

 require_once("connect_db.php"); 
    $row_data = array();
    foreach($_POST['attendancerecordid'] as $row=>$attendancerecordid) {
    $attendancerecordid=mysqli_real_escape_string($dbc,$attendancerecordid);
    $employeeid=mysqli_real_escape_string($dbc,($_POST['employeeid'][$row]));
    $linemanagerid=mysqli_real_escape_string($dbc,($_POST['linemanagerid'][$row]));
    $abscencecode=mysqli_real_escape_string($dbc,($_POST['abscencecode'][$row]));
    $date=mysqli_real_escape_string($dbc,($_POST['date'][$row]));

    $row_data[] = "('$attendancerecordid', '$employeeid', '$linemanagerid', '$abscencecode', '$date')";
    }
    if (!empty($row_data)) {
    $sql = 'INSERT INTO attendance (attendancerecord, employeeid, linemanagerid, abscencecode, date) VALUES '.implode(',', $row_data) 
ON DUPLICATE KEY UPDATE abscencecode = $row_data[abscencecode];
    echo $sql;
    $result = mysqli_query ($dbc, $sql) or die(mysqli_error ($dbc));
    }

各种echo语句显示正确的数据正在通过,并且在我添加ON DUPLICATE语句之前,我的select语句如预期的那样。

您需要修复通过字符串连接构建sql语句的方式。当你创建一个sql语句时,回显它并在你最喜欢的mysql管理器应用程序中运行它进行测试。

 $sql = 'INSERT INTO attendance (attendancerecord, employeeid, linemanagerid, abscencecode, date) VALUES ('.implode(',', $row_data).') ON DUPLICATE KEY UPDATE abscencecode = 1'; //1 is a fixed value yiu choose

更新:刚刚注意到你的$row_data数组没有命名键,它只是包含整个新行值作为字符串。由于要进行批量插入(在一条语句中插入多行),因此必须在on duplicate key子句中提供单个缺位码,或者必须在单独的插入中执行每一行,以便在循环中获得每一行的缺位码。