パラメータ化されたプリペアドステートメントを実行する場合にのみ一重引用符で役立ちます。それ以外の場合は、文字列の連結のみを実行し、SQLを適切に形成する必要があります。
次のようなものを試してください:
$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) {
...
}
これにより、SQLインジェクション攻撃を軽減するという追加の利点も得られます。
さらに一歩進んでデータ型を適用する場合は、bindValue()
を使用できます。 またはbindParam()
のように:
$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()
bindParam()
と同様の構文があります ただし、ステートメント実行時の変数の値ではなく、パラメーターへのバインド時の変数の値のみをバインドします。