亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

"僅處理MySQL IN數(shù)組的第一個值"
P粉921165181
P粉921165181 2023-09-01 12:53:15
0
2
611
<p>我正在使用PHP程式設(shè)計來建立一個PDO語句。 </p> <p>PDO預(yù)處理語句如下:</p> <p><code>更新`log` SET `id` = ? WHERE `id` IN ( ? );</code></p> <p><code>IN</code>陣列中的變數(shù)內(nèi)容是整數(shù)。 </p> <p>第一個<code>?</code>是一個單獨的整數(shù)。第二個<code>?</code>是一個整數(shù)數(shù)組,所以我將它們連接成字串<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>陣列中的第一個整數(shù)ID。 </strong>與<code>IN</code>陣列中的整數(shù)相符的任何ID都應(yīng)該被更改。 </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>
P粉921165181
P粉921165181

全部回覆(2)
P粉216203545

嘗試類似這樣的程式碼:

public function mergeIDs($newID,$changeTheseIDs){ //(分別為整數(shù)和整數(shù)數(shù)組)
$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);
}
P粉446800329

你需要為IN子句中的每個整數(shù)準備一個?,不能只有一個。

public function mergeIDs($newID,$changeTheseIDs){ //(分別是整數(shù)和整數(shù)數(shù)組)
    $inPH = implode(',', array_fill(0, count($changeTheseIDs), '?'));
    $query = $this->connect()->prepare("UPDATE `log` SET `id` = ? WHERE `id` IN ( {$inPH} );");
    $query->execute([$newID, ...$changeTheseIDs]);
}
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板