Mysql
 sql >> Database >  >> RDS >> Mysql

pdo preparare virgolette singole di escape

Aiuta con le virgolette singole solo se esegui istruzioni preparate parametrizzate, altrimenti tutto ciò che fai è la concatenazione di stringhe e devi essere soggetto a formare correttamente il tuo SQL.

Prova qualcosa come:

$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) {
    ...
}

Questo ti offre anche il vantaggio aggiuntivo di mitigare gli attacchi SQL injection.

Se vuoi fare un ulteriore passo avanti e applicare i tipi di dati, puoi utilizzare bindValue() o bindParam()

come:

$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() ha una sintassi simile a bindParam() ma lega solo il valore della variabile al momento dell'associazione al parametro anziché il valore della variabile al momento dell'esecuzione dell'istruzione.