"Traitez uniquement la première valeur du tableau MySQL IN"
P粉921165181
P粉921165181 2023-09-01 12:53:15
0
2
470
<p>J'utilise la programmation PHP pour créer une instruction PDO. </p> <p>L'instruction de prétraitement PDO est la suivante : </p> <p><code>Mettre à jour `log` SET `id` = ? WHERE `id` IN ( ? );</code></p> <p><code>IN</code>Le contenu des variables dans le tableau est des entiers. </p> <p>Le premier <code>?</code> Le deuxième <code>?</code> est un tableau d'entiers, donc je les concatène dans la chaîne <code>1,2,3</code>, cette chaîne fonctionne généralement pour <code> /code>tableau. </p> <p>Le code complet est donc le suivant :</p> <pre class="brush:php;toolbar:false;">public function mergeIDs($newID,$change TheseIDs){ // (entier et tableau d'entiers, respectivement) $inSet = imploser(',',$change TheseIDs); $query = $this->connect()->prepare("UPDATE `log` SET `id` = ? WHERE `id` IN ( ? );"); $query->execute([$newID,$change TheseIDs]); }</pré> <p><strong>Le problème semble être que SQL ne traite que le premier ID entier inséré dans le tableau <code>IN</code> </strong>Tout identifiant correspondant à un entier dans le tableau <code>IN</code> </p> <p>Si j'exécute le SQL dans l'outil SQL sur mon serveur comme ceci : </p> <p><code>UPDATE `log` SET `id` = 5 WHERE `id` IN (1,2,3);</code></p> <p>Ça fonctionne bien, je change tous les ID 1, 2 ou 3 en 5. </p> <p>Mais ma version PDO ne change que 1 à 5, 2 et 3 restent les mêmes. </p> <p>Des idées ? </p>
P粉921165181
P粉921165181

répondre à tous(2)
P粉216203545

Essayez un code comme celui-ci :

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);
}
P粉446800329

Vous en avez besoin d'un ? pour chaque entier de la clause IN, pas un seul.

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]);
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!