php - 对数组使用重复键更新

标签 php mysql

我对 MYSQL 比较陌生,并且在结合我读过的想法时遇到困难。我有一个根据查询生成的表单。我希望能够根据当前是否存在匹配的行来插入或更新。我有以下适用于插入的代码,但我正在努力处理“重复更新”部分,我不断收到一条消息,说我的语法中有错误或意外的 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 数组没有命名键,它只包含整个新行值作为字符串。由于您进行批量插入(在 1 个语句中插入多行),因此您必须在 on重复键子句中提供单个缺席代码,或者必须在单独的插入中执行每一行以获取循环中每行的缺席代码.

关于php - 对数组使用重复键更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33096844/

相关文章:

Mysql 全文搜索与左连接另一个表

php - SQL 不向数据库中插入信息

javascript - PHP 表单提交和 AJAX 验证

php - 当 woocommerce 产品中没有内容时隐藏自定义选项卡

php - 如何将数据库单元格数据插入javascript警报

php - PHP 中的基本 SQL Select 语句格式化

mysql - 作为 MySQL 时间戳的库存正常运行时间值

php - 使用 Vim 正确缩进 HTML 和 PHP

mysql - MySql中如何合并两个数据库

php - 如何在 CakePHP 3 中保存之前格式化日期字段?