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.