我对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));
}
在我添加ON DUPLICATE语句之前,各种echo语句显示正确的数据正在通过,我的select语句是预期的。
答案 0 :(得分:1)
您需要修复通过字符串连接构造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 duplicate key子句中提供单个缺省代码,或者您必须在单独的插入中执行每一行以获取循环中每行的缺失代码