Mysql
 sql >> Datenbank >  >> RDS >> Mysql

pdo Bereiten Sie einfache Anführungszeichen vor

Es hilft bei einfachen Anführungszeichen nur, wenn Sie parametrisierte vorbereitete Anweisungen machen, ansonsten ist alles, was Sie tun, eine String-Verkettung und Sie müssen Ihr SQL richtig formulieren.

Versuchen Sie etwas wie:

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

Dies bietet Ihnen auch den zusätzlichen Vorteil, SQL-Injection-Angriffe abzuwehren.

Wenn Sie noch einen Schritt weiter gehen und Datentypen erzwingen möchten, können Sie bindValue() verwenden oder bindParam()

wie:

$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() hat eine ähnliche Syntax wie bindParam() bindet aber nur den Wert der Variablen zum Zeitpunkt der Bindung an den Parameter und nicht den Wert der Variablen zum Zeitpunkt der Ausführung der Anweisung.