Подготовленный оператор с PHP и MySQL без использования mysqli - PullRequest
4 голосов
/ 26 января 2010

Я хотел бы знать, возможно ли создать подготовленный оператор с помощью PHP и MySQL, используя библиотеку mysql, а не библиотеку mysqli.

Я ничего не могу найти в документации PHP.

Спасибо.

Ответы [ 3 ]

6 голосов
/ 26 января 2010

В документации PHP совершенно ясно говорится (в конце этой страницы), что расширение mysql не не поддерживает подготовленные операторы. Альтернативой mysqli, которая поддерживает подготовленные заявления, будет PDO_MYSQL.

3 голосов
/ 26 января 2010
0 голосов
/ 26 января 2010

Почему вы хотите использовать подготовленное заявление?

Если SQL-инъекция вас интересует, вы всегда можете свернуть свою собственную:

$fname = "Robert'); DROP TABLE students;--";
$lname = "Smith";

$pureSql = "SELECT FROM `users` WHERE `fname` = '$fname'   AND `lname` = '$lname'";
$prepSql = "SELECT FROM `users` WHERE `fname` = :userfname AND `lname` = :userlname";

echo $pureSql, "\n";
echo prepare($prepSql, array('userfname' => $fname, 'userlname' => $lname)), "\n";

function prepare($sql, $params=array()){

    if(strlen($sql) < 2 || count($params) < 1){
        return $sql;
    }

    preg_match_all('/\:[a-zA-Z0-9]+/', $sql, $matches);

    $safeSql = $sql;
    foreach($matches[0] as $arg){
        if(array_key_exists(ltrim($arg, ':'), $params)){
            $safeSql = str_replace($arg, "'" . mysql_real_escape_string($params[ltrim($arg, ':')]) . "'", $safeSql);
        }
    }

    return $safeSql;

} //prepare()

Вывод:

ВЫБРАТЬ ИЗ users ГДЕ fname = 'Роберт'); DROP TABLE студенты; - 'И lname =' Смит ' ВЫБРАТЬ ИЗ users ГДЕ fname = 'Роберт \'); DROP TABLE студенты; - 'И lname =' Смит '

РЕДАКТИРОВАТЬ: забыл ссылку xkcd http://xkcd.com/327/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...