我对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子句中提供单个缺位码,或者必须在单独的插入中执行每一行,以便在循环中获得每一行的缺位码。