sql >> データベース >  >> RDS >> Mysql

pdoは一重引用符をエスケープする準備をします

    パラメータ化されたプリペアドステートメントを実行する場合にのみ一重引用符で役立ちます。それ以外の場合は、文字列の連結のみを実行し、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()と同様の構文があります ただし、ステートメント実行時の変数の値ではなく、パラメーターへのバインド時の変数の値のみをバインドします。




    1. regexp_substrを使用して、Oracleで区切り文字として文字列をスペースと文字で分割します

    2. スパンをMySQLデータベースに時間どおりに保存する最良の方法は?

    3. DataSourceを使用したjetty-env.xmlにより、mvn jetty:runでWebAppContextが失敗します

    4. エスケープされたUnicode文字をPostgreSQLで実際の文字に変換します