Mysql
 sql >> Base de données >  >> RDS >> Mysql

pdo préparer l'échappement des guillemets simples

Cela n'aide avec les guillemets simples que si vous faites des instructions préparées paramétrées, sinon tout ce que vous faites est une concaténation de chaînes et vous devez être soumis à la formation correcte de votre SQL.

Essayez quelque chose comme :

$sql = "INSERT INTO anagrafiche SET
        id_ndg = :protocol,
        nick = :nick,
        nome = :nome,
        ...
        ";
$params = array(
    ':protocol' => $protocol,
    ':nick' => $nick,
    ':nome' => $nome,
    ...
); 
try{
    $s = $pdo->prepare($sql);               
    $s->execute($params);
} catch (PDOException $e) {
    ...
}

Cela vous donne également l'avantage supplémentaire d'atténuer les attaques par injection SQL.

Si vous voulez aller plus loin et appliquer les types de données, vous pouvez utiliser bindValue() ou bindParam()

comme :

$sql = "INSERT INTO anagrafiche SET
        id_ndg = :protocol,
        nick = :nick,
        nome = :nome,
        ...
        "; 
try{
    $s = $pdo->prepare($sql);
    $s->bindParam(':protocol', $protocol, PDO::PARAM_ST);
    $s->bindParam(':nick', $nick, PDO::PARAM_ST);
    $s->bindParam(':nome', $nome, PDO::PARAM_ST);
    ...
    $s->bindParam(':some_integer', $some_integer, PDO::PARAM_INT);
    ...           
    $s->execute();
} catch (PDOException $e) {
    ...
}

bindValue() a une syntaxe similaire à bindParam() mais ne lie que la valeur de la variable au moment de la liaison au paramètre plutôt que la valeur de la variable au moment de l'exécution de l'instruction.