“mysql_real_escape_string”错误DESPITE连接到数据库..我做错了什么?

时间:2012-01-26 07:05:42

标签: javascript php prepared-statement mysql-real-escape-string

好的,这让我发疯了。 我的PHP版本是5.2.17,MySQL版本是5.1.59

我的javascript(jquery)是:

    $(document).ready(function(){$.post("file.php",{"dropTable":tableName}, function(data){});});

这是页面加载时的ajax调用

我的“file.php”包含以下代码:

    <?php

        require_once"getDBParameters.php";

        $dbParameters = getDBParameters();
        if($dbc = mysqli_connect($dbParameters['db_host'], $dbParameters['db_username'], $dbParameters['db_pass'], $dbParameters['db_name'])){

            if(isset($_POST['dropTable'])){
                $dropTable= $_POST['dropTable'] ;               
                $escapedRealString = mysql_real_escape_string($dropTable, $dbc );

                echo ($escapedRealString );
                exit();
            }
        }
    ?>

我收到PHP错误说:

    mysql_real_escape_string() expects parameter 2 to be resource, object given in file.php on line 9

如果我使用预准备语句,相同的连接可以正常工作,但是,在这种情况下我不能使用预准备语句,因为我根据用户输入删除了MYSQL表:

    DROP TABLE $dropTable

PHP手册说我不能使用像这样的准备语句:

    prepare("DROP TABLE ?")

我可以向你保证,“getDBParameters”函数运行正常。 有什么问题 ?还有其他解决办法吗?

2 个答案:

答案 0 :(得分:5)

mysqli_connect
     ^
mysql_real_escape_string
     ^

您正在混合MySQL i 和MySQL功能。它们是完全不同的,不兼容的扩展。如果必须,请使用mysqli::real_escape_string

答案 1 :(得分:1)

如果您正在使用mysqli_connect,则无法使用mysql转义函数。

您也可以使用mysqli_real_escape_string

请注意,因为PHP mysql和mysqli库是不同的,所以参数类型也是如此。 mysql使用resource,而mysqli是object

编辑:如上所述,根据用户输入删除表是危险的。