0

私は主にPhp 5.4+ および MySql 5.5+ バージョンで作業しています。私はすべてのプロジェクトでCodeigniterを使用しています。

私が直面している問題は

ときどき (一部の運用サーバーでは) POST 変数に ' または " 引用符が含まれていると、データベース エラーが発生します。

PHPとCIには、これらの文字列をaddslashesmysql_escape_sequenceなどで処理するための優れた機能がありますが

  1. ユーザーによって投稿されている可能性のあるすべての変数について、これらの条件を確認するのはそれほど簡単ではありません

  2. 毎回、addslashes を使用する必要があります。例: It\'s であり、出力を提供しているときに、出力 It's にストリップスラッシュを再度適用する必要があります。しかし、大きな値を扱うのは難しいです。

  3. データベースはデータをそのまま保存するため、これらの文字列を検索するのは困難です。

何日も苦労して、utf8mb4_general_ciを使用する方がutf8よりも有利であることがわかりました

したがって、CIのDatabase.phpに次のものがあることを確認しました

    $db['default']['char_set'] = 'utf8mb4';
    $db['default']['dbcollat'] = 'utf8mb4_unicode_ci';

また、それぞれの列のデータ型を「LONGTEXT」に変更し、その照合を「utf8mb4_general_ci」に変更しました

驚いたことに、それらはいくつかのサーバーで機能しました。

しかし、まだ一部のサーバーで同じ問題が見つかりました。サーバー構成がそれらの稼働中のサーバーと一致していることを確認したにもかかわらず、これは少しイライラします。

すべての php および mysql 開発者は、このシナリオでどのように作業していますか? どのような予防策を講じていますか?

提案してください!!

4

1 に答える 1

3

私の古いプロジェクトでは、DB::esc()使用しているライブラリに渡されるエスケープ関数をラップする関数がありmysql_real_escape_stringます。

私の新しいプロジェクトでは、準備済みステートメントを使用し、拡張機能に処理させます。

于 2014-04-08T16:27:04.653 に答える