PDO PHP : BindValue ou BindParam

WRInaute impliqué
Bonjour, j'aimerais avoir votre avis concernant le code ci-dessous. A votre avis faut-il utiliser BindValue ou BindParam ? Dans les 2 cas le code fonctionne mais y a t'il une vraie différence ?

Merci d'avance

PHP:
extract($_POST);

$sql = "UPDATE sales SET phone_number = :phone_number WHERE id_ad = :id_ad";

try{

    $requete = $bdd -> prepare($sql);
    $requete->bindValue(':phone_number', $_POST['var_phone'], PDO::PARAM_STR);
    $requete->bindValue(':id_ad', $_POST['var_id'], PDO::PARAM_STR);
    $requete->execute();

De meme qu'en est t-il de PARAM_STR ?

var_phone est tout simplement un numéro de téléphone (exemple : 0600000000)
et var_id est un nombre de 8 chiffres.

Serait-il par plus judicieux d'utiliser PARAM_INT ?

Merci
 
Dernière édition:
WRInaute accro
La différence est notée clairement dans la doc :
Lie une variable PHP à un marqueur nommé ou interrogatif correspondant dans une requête SQL utilisée pour préparer la requête. Contrairement à PDOStatement::bindValue(), la variable est liée en tant que référence et ne sera évaluée qu'au moment de l'appel à la fonction PDOStatement::execute().
http://php.net/manual/fr/pdostatement.bindparam.php

Et le paramètre $data_type c'est pour lui spécifier explicitement le type afin qu'il ne mette pas de quotes à un integer par exemple.

Donc oui PARAM_INT pour le numéro de téléphone, sauf s'il y a un "+" devant.

HS: extract($_POST) ? tu émules le register globals o_O
HS2: tu pourrais mapper les variables POST à celles de la requête SQL et faire plus simplement $requete->execute($_POST);
 
WRInaute impliqué
Par contre comment se fait-il que je ne puisse pas utiliser ton astuce sur ce code ?

PHP:
            $sql = "UPDATE sales SET offline_ad = 1 WHERE id_ad = :id_ad";

            $requete2 = $bdd -> prepare($sql);
            $requete2->bindParam(':id_ad', $element['id_ad'], PDO::PARAM_INT);   
            $requete2->execute();

J'ai fais ceci mais cela ne fonctionne pas :

PHP:
            $sql = "UPDATE sales SET offline_ad = 1 WHERE id_ad = :id_ad";

            $requete2 = $bdd -> prepare($sql);
            $requete2->execute($element);

$element['id_ad'] provient d'une requete SELECT pour info

Merci
 
WRInaute impliqué
Étonnant car ce code fonctionne parfaitement sans ton array()

PHP:
$sql = "UPDATE sales SET phone_number = :phone_number WHERE id_ad = :id_ad";

    $requete = $bdd -> prepare($sql);
    $requete->execute($_POST);

Concerant l'autre code il ne serait pas plus judicieux de le laisser tel quel plutôt que rajouter les array() ?

PHP:
$sql = "UPDATE sales SET offline_ad = 1 WHERE id_ad = :id_ad";

            $requete2 = $bdd -> prepare($sql);
            $requete2->bindParam(':id_ad', $element['id_ad'], PDO::PARAM_INT);   
            $requete2->execute();
 
Discussions similaires
Haut