Ошибка "mysql_real_escape_string" DESPITE при подключении к базе данных ... что я делаю не так? - PullRequest
0 голосов
/ 26 января 2012

Хорошо, это сводит меня с ума. Моя версия 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 ]

5 голосов
/ 26 января 2012
mysqli_connect
     ^
mysql_real_escape_string
     ^

Вы смешиваете функции MySQL i и MySQL. Они совершенно разные, несовместимые расширения. Используйте mysqli::real_escape_string, если нужно.

1 голос
/ 26 января 2012

Если вы используете mysqli_connect, вы не можете использовать функцию выхода из mysql.

Вы также можете использовать mysqli_real_escape_string.

Обратите внимание: поскольку библиотеки PHP mysql и mysqli различны, типы параметров также являются разными. mysql использует ресурс , тогда как mysqli является объектом .

РЕДАКТИРОВАТЬ: Как отмечалось, удаление таблиц на основе ввода пользователя опасно.

...