1

私の Web アプリケーションはクライアントから URL オブジェクトを取得しmcrypt_encrypt、. この全体は、以下に示すように行われます。

    /* $copied below is received from user and can be any string. But I'm just using a URL as example,as that's where it fails */
    $copied = "http://www.google.com"
    $encCopied = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$encryption_key,$copied,MCRYPT_MODE_CFB);

    $copystuff = "UPDATE LinkTable set copied='$encCopied'";

    mysqli_query($db,$copystuff)

このコードを実行すると、最後の行の MYSQL クエリが「構文エラー」で失敗します。上記のphpで変数を手動で変更することを含む何時間ものデバッグの後、$copied変数のコロン(「:」)が原因で発生することが最終的にわかりました$copied。に変更$copiedするwww.google.comと、SQL 構文エラーはスローされず、すべてが完璧に機能します。しかし、その後 に変更$copiedすると:www.google.com、SQL で再び構文エラーが発生します。

このコードは、他のすべてのタイプの文字列に対して機能しますが、コロンが存在する場合にのみ失敗することに注意してください。私の仮定はmcrypt_encrypt、コロンを MYSQL が処理できない実行不可能なものに暗号化することです。

表示されるエラーは、コロンがある場合は次のように
なります。 SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

なぜこれが起こっているのかについての情報はありますか? 現在、URL から部分を取り除いた後に URL を送信することで、アプリケーションを機能させてhttp://います。

ありがとう。

4

1 に答える 1

2

SQL を中断している文字がどこかにあると確信しています。暗号化された文字列をエスケープしてみてください。

$copystuff = "UPDATE LinkTable set copied='" . mysqli_real_escape_string($encCopied) . "'";
于 2013-05-04T00:01:20.510 に答える