Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

pdo prepare escapando aspas simples


Ele ajuda com aspas simples apenas se você fizer instruções preparadas parametrizadas, caso contrário, tudo o que você está fazendo é concatenação de strings e precisa estar sujeito à formação adequada de seu SQL.

Tente algo como:
$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) {
    ...
}

Isso também oferece a vantagem adicional de mitigar os ataques de injeção de SQL.

Se você quiser dar um passo adiante e impor tipos de dados, você pode usar bindValue() ou bindParam()

Curti:
$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() tem sintaxe semelhante a bindParam() mas apenas vincula o valor da variável no momento da vinculação ao parâmetro, em vez do valor da variável no momento da execução da instrução.