sql >> Base de Datos >  >> RDS >> Mysql

pdo preparar escapando comillas simples

Ayuda con las comillas simples solo si hace declaraciones preparadas parametrizadas; de lo contrario, todo lo que está haciendo es concatenación de cadenas y debe estar sujeto a la formación adecuada de su SQL.

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

Esto también le brinda la ventaja adicional de mitigar los ataques de inyección SQL.

Si quiere ir un paso más allá y hacer cumplir los tipos de datos, puede usar bindValue() o bindParam()

como:

$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() tiene una sintaxis similar a bindParam() pero solo vincula el valor de la variable en el momento de la vinculación con el parámetro en lugar del valor de la variable en el momento de la ejecución de la instrucción.