Heim  >  Fragen und Antworten  >  Hauptteil

„Nur den ersten Wert des MySQL IN-Arrays verarbeiten“

<p>Ich verwende PHP-Programmierung, um eine PDO-Anweisung zu erstellen. </p> <p>Die PDO-Vorverarbeitungsanweisung lautet wie folgt: </p> <p><code>Update `log` SET `id` = ? WHERE `id` IN ( ? );</code></p> <p><code>IN</code>Die Variableninhalte im Array sind Ganzzahlen. </p> <p>Der erste <code>?</code> ist eine einzelne Ganzzahl. Der zweite <code>?</code> ist ein Array von Ganzzahlen, daher verkette ich sie in der Zeichenfolge <code>1,2,3</code>; diese Zeichenfolge funktioniert normalerweise für <code> /code>Array. </p> <p>Der vollständige Code lautet also wie folgt: </p> <pre class="brush:php;toolbar:false;">public function mergeIDs($newID,$changeTheseIDs){ // (Ganzzahl bzw. Array von Ganzzahlen) $inSet = implode(',',$changeTheseIDs); $query = $this->connect()->prepare("UPDATE `log` SET `id` = ? WHERE `id` IN ( ? );"); $query->execute([$newID,$changeTheseIDs]); }</pre> <p><strong>Das Problem scheint zu sein, dass SQL nur die erste Ganzzahl-ID verarbeitet, die in das Array <code>IN</code> eingefügt wird. </strong>Jede ID, die mit einer Ganzzahl im Array <code>IN</code> übereinstimmt, sollte geändert werden. </p> <p>Wenn ich die SQL im SQL-Tool auf meinem Server wie folgt ausführe: </p> <p><code>UPDATE `log` SET `id` = 5 WHERE `id` IN (1,2,3);</code></p> <p>Es funktioniert einwandfrei, ich habe alle IDs 1, 2 oder 3 in 5 geändert. </p> <p>Aber meine PDO-Version ändert sich nur 1 bis 5, 2 und 3 bleiben gleich. </p> <p>Irgendwelche Ideen? </p>
P粉921165181P粉921165181434 Tage vor467

Antworte allen(2)Ich werde antworten

  • P粉216203545

    P粉2162035452023-09-02 09:56:29

    尝试类似这样的代码:

    public function mergeIDs($newID,$changeTheseIDs){ //(分别为整数和整数数组)
    $mergeSet = array_merge([$newID],$changeTheseIDs);
    $marks = array_fill(0, count($changeTheseIDs), '?');
    $query = $this->connect()->prepare("UPDATE `log` SET `id` = ? WHERE `id` IN (". implode(',',  $marks) .");");
    $query->execute($mergeSet);
    }

    Antwort
    0
  • P粉446800329

    P粉4468003292023-09-02 00:11:20

    你需要为IN子句中的每个整数准备一个?,不能只有一个。

    public function mergeIDs($newID,$changeTheseIDs){ //(分别是整数和整数数组)
        $inPH = implode(',', array_fill(0, count($changeTheseIDs), '?'));
        $query = $this->connect()->prepare("UPDATE `log` SET `id` = ? WHERE `id` IN ( {$inPH} );");
        $query->execute([$newID, ...$changeTheseIDs]);
    }

    Antwort
    0
  • StornierenAntwort