IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête préparée avec tableau d'entiers [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Requête préparée avec tableau d'entiers
    Bonjour,

    Je souhaite utiliser une requête préparée avec la commande DELETE pour supprimer des données grâce à un tableau d'entiers (des identifiants).
    Ces identifiants sont récupérés au format JSON.

    Voici la structure de la table où je souhaite faire ma requête :
    Nom : 2018-08-11_174958.png
Affichages : 169
Taille : 13,5 Ko

    J'ai commencé par un premier code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    	require_once('connexiondb.php');
     
    	$json = file_get_contents('php://input');
    	$arrayTopicIds = json_decode($json);
     
    	$stmt = $db->prepare('DELETE FROM topicspe WHERE topicpe_id IN ('.implode(',', array_map('intval', $arrayTopicIds)).')');
    	$stmt->execute();
    	$stmt->closeCursor();
    ?>
    Mais je préfère faire ça un peu plus proprement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    	require_once('connexiondb.php');
     
    	$json = file_get_contents('php://input');
    	$arrayTopicIds = json_decode($json);
    	$topicsIds = implode(',', array_map('intval', $arrayTopicIds));
     
    	$stmt = $db->prepare('DELETE FROM topicspe WHERE topicpe_id IN (:ids)');
    	$stmt->bindParam(':ids', $topicsIds);
    	$stmt->execute();
    	$stmt->closeCursor();
    ?>
    Mais le message suivant apparaît :
    SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect DOUBLE value: '13,14'

    Qu'aurais-je oublié ?

    En vous remerciant pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    on ne peut pas passer ce genre de paramètres avec "IN (...)".

    Ta 1ère méthode est bonne, d'autant que tu utilises intval (suffisant pour protéger).

    Une autre méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    	require_once('connexiondb.php');
     
    	$json = file_get_contents('php://input');
    	$arrayTopicIds = json_decode($json); // array des ids
     
    	// on prepare la requête (une seule fois !)
    	$stmt = $db->prepare('DELETE FROM topicspe WHERE topicpe_id = :id');
     
    	// on exécute pour chaque id :
    	foreach( $topicsIds as $id )
    	{
    	   $stmt->bindValue(':id', $id, PDO::PARAM_INT);
    	   $stmt->execute();
    	}
    	$stmt->closeCursor();
    ?>
    Dernière modification par Invité ; 11/08/2018 à 19h09.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup jreaux62.
    Je note également cette deuxième méthode.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Résultat d'une requête préparée dans tableau html
    Par Ether.Kurios dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/05/2011, 13h14
  2. Faire des requêtes préparées avec l'extension mysql
    Par stealth35 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 3
    Dernier message: 03/03/2011, 02h15
  3. Faire des requêtes préparées avec l'extension mysql
    Par stealth35 dans le forum Téléchargez
    Réponses: 1
    Dernier message: 23/02/2011, 10h23
  4. [PDO] Requête préparée avec un nom de colonne en paramètre
    Par chewing-gum dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/01/2011, 17h00
  5. [MySQL] Requête préparée avec id autoincrement
    Par skandaboy dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/01/2011, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo