Rumah  >  Soal Jawab  >  teks badan

"Hanya proses nilai pertama tatasusunan MySQL IN"

<p>Saya menggunakan pengaturcaraan PHP untuk mencipta pernyataan PDO. </p> <p>Pernyataan prapemprosesan PDO adalah seperti berikut: </p> <p><kod>Kemas kini `log` SET `id` = ? <p><kod>IN</code>Kandungan pembolehubah dalam tatasusunan ialah integer. </p> <p> <kod>?</code> ialah satu integer. <kod>?</kod> ialah tatasusunan integer, jadi saya menggabungkannya ke dalam rentetan <kod>1,2,3</kod>, rentetan ini biasanya berfungsi untuk <kod> /code>array. </p> <p>Jadi kod lengkapnya adalah seperti berikut: </p> <pre class="brush:php;toolbar:false;">public function mergeIDs($newID,$changeTheseIDs){ // (integer dan tatasusunan integer, masing-masing) $inSet = implode(',',$changeTheseIDs); $query = $this->connect()->prepare("KEMASKINI `log` SET `id` = ? DI MANA `id` DALAM ( ? );"); $query->execute([$newID,$changeTheseIDs]); }</pre> <p><strong>Masalahnya nampaknya SQL hanya memproses ID integer pertama yang dimasukkan ke dalam tatasusunan <kod>IN</code> </strong>Mana-mana ID yang sepadan dengan integer dalam tatasusunan <kod>IN</code> </p> <p>Jika saya menjalankan SQL dalam alat SQL pada pelayan saya seperti ini: </p> <p><kod>KEMASKINI `log` SET `id` = 5 DI MANA `id` DALAM (1,2,3);</code></p> <p>Ia berfungsi dengan baik, saya menukar semua ID 1, 2 atau 3 kepada 5. </p> <p>Tetapi versi PDO saya hanya menukar 1 kepada 5, 2 dan 3 kekal sama. </p> <p>Ada idea? </p>
P粉921165181P粉921165181434 hari yang lalu466

membalas semua(2)saya akan balas

  • P粉216203545

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

    Cuba kod seperti ini:

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

    balas
    0
  • P粉446800329

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

    Anda memerlukan satu ? untuk setiap integer dalam klausa IN, bukan hanya satu.

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

    balas
    0
  • Batalbalas