2017-06-22 1 views
0

zu verwenden, damit der Benutzer seine eigenen Daten sortieren kann. Sagen wir, ich habe mehrere Tiere in jeder Reihe mit einer eigenen Uniqe ID. Dann lasse ich den Benutzer die Tiere mit einer Nummer von 1 bis x sortieren. Um dies zu tun, muss ich mehrere Zeilen in meiner SQL-Tabelle aktualisieren. Ich machte Id uniqe. Und dann habe ich versucht, diese SQL-Satz (das ist, was die SQL zu laufen versucht, meine eigentliche PHP-Code unter diesem Code ist)Bei der Aktualisierung mehrerer Zeilen tritt ein Fehler auf und versucht, ON DUPLICATE KEY

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); 

eigentlich mein Code sieht wie folgt aus:

 $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(); 

und ich bekomme diese Fehler:

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

Linie 35 ist $sql->bind_param(str_repeat("i", count($arrparams)), ...$arrparams);

ich kann nichts sehen Ich habe Unrecht getan, oder? Warum kann ich meine Tabelle nicht aktualisieren?

Antwort

0

Der richtige Weg, dies zu tun ist:

 $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(); 

Das einzige, was ich änderte, war dies: $sql_sentence2 .= 'Sort=VALUES(Sort),';

0

Dieser Fehler bedeutet, $ conn-> prepare ($ sql_sentence); ' gibt FALSCH zurück. Das heißt, Sie haben einen Fehler bei der Ausführung von '$ conn-> prepare ($ sql_sentence)' (fast immer ist es ein Syntaxfehler in der SQL-Abfrage). Ich denke, dass Sie PDO verwenden, so dass für weitere Informationen nur einen Blick in die Dokumentation nehmen http://php.net/manual/en/pdo.prepare.php

Verwandte Themen