Pomaga w przypadku pojedynczych cudzysłowów tylko wtedy, gdy wykonujesz sparametryzowane przygotowane instrukcje, w przeciwnym razie wszystko, co robisz, to łączenie ciągów i musisz podlegać prawidłowemu stworzeniu kodu SQL.
Wypróbuj coś takiego:
$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) {
...
}
Daje to również dodatkową korzyść polegającą na łagodzeniu ataków typu SQL injection.
Jeśli chcesz pójść o krok dalej i wymusić typy danych, możesz użyć bindValue()
lub bindParam()
jak:
$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()
ma podobną składnię do bindParam()
ale wiąże tylko wartość zmiennej w momencie wiązania z parametrem, a nie wartość zmiennej w momencie wykonania instrukcji.