0

アポストロフィを含む可能性のある値を挿入する SQL ステートメントを作成するにはどうすればよいでしょうか(たとえば、ある人の姓は Conner で、別の人の姓は O'Conner でした)。いくつかの検索の後、二重アポストロフィ ( O''Conner example) を使用する例を見つけましたが、各例では、INSERT. 値にアポストロフィが含まれる場合と含まれない場合がある例に出くわしたことはありません。

私の単純なステートメントは、アポストロフィが使用されていない場合は問題ありませんが、アポストロフィが使用されている場合は失敗します。を使用してアポストロフィを置き換えることができることはわかっていますstr_replaceが、明らかに、それによって O'Conner の例が OConner として表示されます。 

例として、簡略版を次に示します。

page1.php

// PHP
include_once('phpdata.php');
if (isset($_POST['firstname']) && isset($_POST['lastname'])) {
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];

    // SQL connection
    $insert = doInsert($firstname, $lastname);
    // Execute statement using odbc_exec, etc.
}

// HTML
<input type="text" class="required" name="firstname" id="firstname" />
<input type="text" class="required" name="lastname" id="lastname" />

phpdata.php

function doInsert($firstname, $lastname) {
    $insert = "INSERT INTO mytable (firstname, lastname)
                VALUES ('$firstname', '$lastname')";
    return $insert;
}
4

4 に答える 4

2

replace を使用して、すべての ' を '' に置き換えることができます。ただし、これを行う適切な方法は、パラメーターとして SQL ステートメントに挿入する値を渡すパラメーター化されたクエリを使用することです。次に、言語は ' および問題を引き起こす可能性のあるその他の文字/キーワードをクリーンアップできます。言語に関係なく、パラメーター化されたクエリが最適です。

于 2013-09-20T20:39:41.597 に答える