私は、最小限の労力で PDOmysql_query
になどの多くの古い PHP mysql プロシージャル関数を移行しようとしています。すべての古い DB 関数を書き直したくありません。その理由は、かなり古いアプリケーションであり、新しいモジュールを開発中であり、そこで PDO を使用したいからです。mysql_real_escape_string
だから今、私はこれらの古い関数を PDO メソッドに移植して_port
います。mysql_query_port
mysql_fetch_array_port
mysql_num_rows_port
mysql_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_string
mysql 接続がないと使用できないことです。ですから、何をすべきかを決めるのを手伝ってください(またはコードのバグを見つけてください):
mysql_pconnect()
引き続き使用できるように、スクリプトの先頭で初期化します(mysql_real_escape_string
その接続を介してクエリを実行することはありません)。- 代替案を書いてください。マニュアルには、この関数は「\x00、\n、\r、\、'、"、\x1a の文字の前にバックスラッシュを追加する」と書かれているので、次のように考えました。
.
function mysql_real_escape_string_port($string) {
return addcslashes ($string, "\x00\n\r\\'\"\x1a");
}
どう思いますか?