"僅處理MySQL IN數組的第一個值"
P粉921165181
2023-09-01 12:53:15
<p>我正在使用PHP程式設計來建立一個PDO語句。 </p>
<p>PDO預處理語句如下:</p>
<p><code>更新`log` SET `id` = ? WHERE `id` IN ( ? );</code></p>
<p><code>IN</code>陣列中的變數內容是整數。 </p>
<p>第一個<code>?</code>是一個單獨的整數。第二個<code>?</code>是一個整數數組,所以我將它們連接成字串<code>1,2,3</code>,這個字串通常適用於<code> IN</code>陣列。 </p>
<p>所以完整的程式碼如下:</p>
<pre class="brush:php;toolbar:false;">public function mergeIDs($newID,$changeTheseIDs){ // (integer and array of integers, respectively)
$inSet = implode(',',$changeTheseIDs);
$query = $this->connect()->prepare("UPDATE `log` SET `id` = ? WHERE `id` IN ( ? );");
$query->execute([$newID,$changeTheseIDs]);
}</pre>
<p><strong>問題似乎是SQL只處理插入到<code>IN</code>陣列中的第一個整數ID。 </strong>與<code>IN</code>陣列中的整數相符的任何ID都應該被更改。 </p>
<p>如果我在我的伺服器上的SQL工具中以這樣的方式運行SQL:</p>
<p><code>更新 `log` SET `id` = 5 WHERE `id` IN (1,2,3);</code></p>
<p>它可以正常工作,我將所有ID為1、2或3的ID都更改為5。 </p>
<p>但是我的PDO版本只將1更改為5,2和3保持不變。 </p>
<p>有什麼想法嗎? </p>
嘗試類似這樣的程式碼:
你需要為IN子句中的每個整數準備一個
?
,不能只有一個。