Помага с единични кавички само ако правите параметризирани подготвени изрази, в противен случай всичко, което правите, е конкатенация на низове и трябва да бъдете обект на правилно формиране на вашия 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()
но обвързва само стойността на променливата в момента на обвързване към параметъра, а не стойността на променливата в момента на изпълнение на оператора.