2017-06-22 52 views
0

使用戶能夠對自己的數據進行排序。比方說,我在每一行都有多個動物,並擁有自己的Uniqe Id。然後我讓用戶用從1到x的數字對動物進行排序。 所以要做到這一點,我必須更新我的sql-table中的多行。我做了Id uniqe。然後,我試過這個SQL句(這是什麼SQL是試圖跑,我實際的PHP代碼是下面這段代碼)更新多行給出錯誤,嘗試使用重複鍵

INSERT INTO boka_homeworktasks (Id,Sort) VALUES (29 ,1),(38 ,2),(30 ,3),(31 ,4),(32 ,5),(33 ,6),(34 ,7),(35 ,8),(36 ,9),(37 ,10),(39 ,11),(40 ,12),(41 ,13),(42 ,14),(43 ,15),(44 ,16),(45 ,17) ON DUPLICATE KEY UPDATE Sort=VALUES(1),Sort=VALUES(2),Sort=VALUES(3),Sort=VALUES(4),Sort=VALUES(5),Sort=VALUES(6),Sort=VALUES(7),Sort=VALUES(8),Sort=VALUES(9),Sort=VALUES(10),Sort=VALUES(11),Sort=VALUES(12),Sort=VALUES(13),Sort=VALUES(14),Sort=VALUES(15),Sort=VALUES(16),Sort=VALUES(17); 

其實我的代碼看起來是這樣的:

 $arrsorter = $_POST["sorter"]; 
     for ($x=0;$x < count($arrsorter);$x++){ 
      $sql_sentence .= '(?,' . ($x + 1) . '),'; 
      array_push($arrparams, $arrsorter[$x]); 
      $sql_sentence2 .= 'Sort=VALUES('. ($x + 1) .'),'; 
     } 
     $sql_sentence = 'INSERT INTO boka_homeworktasks (Id,Sort) VALUES '. substr($sql_sentence,0,-1) .' ON DUPLICATE KEY UPDATE '. substr($sql_sentence2,0,-1) . ';' ; 
     $sql = $conn->prepare($sql_sentence); 
     $sql->bind_param(str_repeat("i", count($arrparams)), ...$arrparams); 
     $sql->execute(); 

我得到這個錯誤:

Fatal error: Uncaught Error: Call to a member function bind_param() on boolean in myfile.php:35 Stack trace: #0 {main} thrown in myfile.php on line 35

35號線是$sql->bind_param(str_repeat("i", count($arrparams)), ...$arrparams);

我看不到任何東西我做錯了,你能嗎?爲什麼不能更新我的桌子?

回答

0

做到這一點,正確的方法是:

 $arrsorter = $_POST["sorter"]; 
    for ($x=0;$x < count($arrsorter);$x++){ 
     $sql_sentence .= '(?,' . ($x + 1) . '),'; 
     array_push($arrparams, $arrsorter[$x]); 
     $sql_sentence2 .= 'Sort=VALUES(Sort),'; //It should not be a value, but refer to a column! 
    } 
    $sql_sentence = 'INSERT INTO boka_homeworktasks (Id,Sort) VALUES '. substr($sql_sentence,0,-1) .' ON DUPLICATE KEY UPDATE '. substr($sql_sentence2,0,-1) . ';' ; 
    $sql = $conn->prepare($sql_sentence); 
    $sql->bind_param(str_repeat("i", count($arrparams)), ...$arrparams); 
    $sql->execute(); 

我唯一改變的是這樣的:$sql_sentence2 .= 'Sort=VALUES(Sort),';

0

此錯誤表示'$ conn-> prepare($ sql_sentence);'返回FALSE。這意味着你在執行'$ conn-> prepare($ sql_sentence)'時遇到錯誤(幾乎一直是SQL查詢中的語法錯誤)。我想,你正在使用PDO,所以更多的信息只是看看到文檔http://php.net/manual/en/pdo.prepare.php

相關問題