2015-10-13 28 views
0

我對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語句和預期的一樣。

+0

echo $ sql輸出是什麼? – Mihai

回答

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 

UPDATE:剛纔注意到你的$ row_data數組沒有命名鍵,它只是包含整個新的行值作爲字符串。由於您要進行批量插入(在1條語句中插入多行),因此您必須在重複鍵子句中提供單個缺席代碼,或者必須在單獨的插入中執行每行以獲取循環中每行的缺席代碼。

+0

現在我得到: 注意:使用未定義的常量abscencecode - 在第19行C:\ Abyss Web Server \ htdocs \ PacificaHR \ attendancesubmit.php中假設'abscencecode' 注意:未定義的索引:C:\ Abyss Web中的abscencecode第19行的Server \ htdocs \ PacificaHR \ attendancesubmit.php –

+0

這只是一個提示,我更早的更新了我的答案,使用$ row_data ['abscencecode']而不是$ row_data [abscencecode]。更重要的問題是:我的建議解決方案是否爲您生成正確的sql語句? – Shadow

+0

SQL語句仍然以非常有用的方式出錯:INSERT INTO出席(考勤記錄,employeeid,linemanagerid,abscencecode,日期)VALUES(('2015-09-18-1','1','20',' 1','2015-10-13'),('2015-09-18-22','22','20','2','2015-10-13'),('2015-09- 18-242','242','20','7','2015-10-13'))DUPLICATE KEY UPDATE abscencecode =你的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,在第1行''旁邊使用正確的語法 –