7

PHP 5.4.4 を使用していますが、FuelPHP ORM の保存および更新機能で非常に奇妙な動作が発生します。

シリアル化されたデータまたは JSON データをデータベースのフィールドに保存しようとしています{"name":"michael"}model->save()直後に使用するModel::forge()と、100% 正常に動作しているように見え、表示される文字列は MySQL データベースに格納されたものです。

ただし、 model->property = 'new property' (JSON またはシリアル化されたデータ プロパティではない) のようなものをすぐに変更してから別の操作を行うmodel->save()と、90% の確率ですべてが ; に変わり"ます&quot

問題をデバッグして 1 行ずつ実行しても、この問題は再現されないようです。スクリプト全体を処理し、"代わりに正しい"を保持します。

この問題は私を夢中にさせています。構成の問題だと思いますが、もっと多くの苦情があると思いますが、適切なスイッチが見つかりません。php_flag magic_quotes_gpc Off.htaccess にとの両方を設定 php_flag magic_quotes_runtime Offし (ただし、PHP 5.4 以降では必要ないはずです)、両方が false であることを確認しました。

私はここでアイデアがありません。調査するものは何でも本当に役に立ちます。

4

3 に答える 3

3

あなたのORMはおそらく、ある種のエスケープ関数を使用してjson文字列を保存しています。これは、SQL インジェクション攻撃を防ぐためのセキュリティ機能です。json を保存する必要がある場合は、MongoDB や CouchDB などの noSql ソリューションを使用してください。それ以外の場合は、json 文字列が mysql から出てきた後、デコードする前に、json 文字列をクリーンアップする必要があります。

http://dev.mysql.com/doc/refman/5.0/en/string-literals.html

于 2012-11-06T15:58:05.367 に答える
0

データベースで " が " に変換される場合、問題はありません。セキュリティのためです。ブラウザで出力をレンダリングすると、再び ".

また、ブラウザが「as」を表示している場合は、印刷する前に値をデコードする必要があります。

于 2012-11-06T11:53:22.130 に答える
0

「echo」ステートメントをいくつか追加して、変数を出力して、どこで発生しているかを把握できるようにしてください。それは通常、理由を見つけるのに大いに役立ちます。

html エンティティに double_encode などを追加して、エンコーディングを停止することもできます。

于 2012-10-02T23:13:53.533 に答える