-1

我正在尝试以最小的努力mysql_query将许多旧的 PHP mysql prodecural 函数等迁移mysql_real_escape_string到 PDO 中。我不想重写每一个旧的数据库函数。原因是它是一个相当旧的应用程序,我正在开发一个新模块并希望在那里使用 PDO。

所以现在我将这些旧函数移植到 PDO 方法中 - 我附加到我的旧函数,_port所以我使用mysql_query_port,和.mysql_fetch_array_portmysql_num_rows_portmysql_real_escape_string_port

前三个效果很好:

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 连接时,我无法使用它。所以请帮我决定要做什么(或在我的代码中找到一个错误):

  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 回答