-1

私は、最小限の労力で PDOmysql_queryになどの多くの古い PHP mysql プロシージャル関数を移行しようとしています。すべての古い DB 関数を書き直したくありません。その理由は、かなり古いアプリケーションであり、新しいモジュールを開発中であり、そこで PDO を使用したいからです。mysql_real_escape_string

だから今、私はこれらの古い関数を PDO メソッドに移植して_portいます。mysql_query_portmysql_fetch_array_portmysql_num_rows_portmysql_real_escape_string_port

最初の 3 つはかなりうまく機能します。

function mysql_query_port($query) {
    $db = Database::instance();
    $statement = $db->prepare($query);

    if (!$statement->execute())
        return false;
    return $statement;
}

function mysql_fetch_array_port(PDOStatement $statement) {
    return $statement->fetch();
}

function mysql_num_rows_port(PDOStatement $statement) {
    return $statement->rowCount();
}

問題は、mysql_real_escape_stringmysql 接続がないと使用できないことです。ですから、何をすべきかを決めるのを手伝ってください(またはコードのバグを見つけてください):

  1. mysql_pconnect()引き続き使用できるように、スクリプトの先頭で初期化します(mysql_real_escape_stringその接続を介してクエリを実行することはありません)。
  2. 代替案を書いてください。マニュアルには、この関数は「\x00、\n、\r、\、'、"、\x1a の文字の前にバックスラッシュを追加する」と書かれているので、次のように考えました。

.

function mysql_real_escape_string_port($string) {
    return addcslashes ($string, "\x00\n\r\\'\"\x1a");
}

どう思いますか?

4

1 に答える 1

0

mysql_real_escape_string出力は接続文字セットに依存するため、接続が必要です。

文字セットを手動で同期できる場合 (またはまったく変更しない場合) は、独自の実装を作成できます。

于 2012-04-27T10:03:49.470 に答える