0

如何将我的 MySQL 函数转换为 PDO?我已通过 PDO 调用成功连接到我的数据库,但我的脚本仍在使用 MySQL 函数。

function query_basic($query)
{
    $result = mysql_query($query);
    if ($result == FALSE)
    {
        $msg = 'Invalid query : '.mysql_error()."\n";
        echo $msg;
    }
}

function query_numrows($query)
{
    $result = mysql_query($query);
    if ($result == FALSE)
    {
        $msg = 'Invalid query : '.mysql_error()."\n";
        echo $msg;
    }
    return (mysql_num_rows($result));
}

function query_fetch_assoc($query)
{
    $result = mysql_query($query);
    if ($result == FALSE)
    {
        $msg = 'Invalid query : '.mysql_error()."\n";
        echo $msg;
    }
    return (mysql_fetch_assoc($result));
}
4

2 回答 2

3

您在以下情况下忘记了分号:

$clientid = mysql_real_escape_string($_GET['id'])

正确的:

$clientid = mysql_real_escape_string($_GET['id']);
                                                 ^
于 2013-10-18T20:54:24.627 回答
1

这些错误的原因是mysql_real_escape_string()您在打开与数据库的连接之前调用。

mysql_real_escape_string()需要在 DB 连接建立后调用,因为它需要知道要转义的数据库的编码方案是什么,因此它知道需要转义哪些字符。

理想情况下,您应该在创建 SQL 字符串之前立即调用它;转义字符串应该只在它们被转义的上下文中使用,所以你不希望它们在程序中离查询的构建位置太远。(这适用于各种转义,而不仅仅是 SQL)。

最终,如果您改用更现代的数据库 API(例如 PDO),您的情况会好得多。无论您使用什么 DB API,您仍然需要注意避免注入攻击,但是使用 PDO 会容易得多。

可以在这里找到一个很好的 PDO 教程:http ://www.sitepoint.com/avoid-the-original-mysql-extension-2/

希望有帮助。

于 2013-10-18T21:45:18.300 回答