2014-01-27 2 views
1

Я столкнулся с реальностью использования mysqli vs. mysql. У меня есть следующие функции, санитарная обработка данныхPHP - возврат пустой строки с использованием mysqli

Это как код был использование MySQL

function sanitize($data){ 
     return htmlentities(strip_tags(mysql_real_escape_string($data))); 
    } 

Сообщения об ошибке при использовании MySQL

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in... 

после прочтения Справочного руководства по PHP на http://us3.php.net/mysqli_real_escape_string и сделал изменения ниже ...

function sanitize($data){ 
     return htmlentities(strip_tags(mysqli_real_escape_string($data, '0'))); 
    } 

... Я получаю следующее сообщение об ошибке после использования MySQLi

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in.... 

Это теперь мешает мне войти в систему. Любая помощь очень ценится!

+0

Читаешь 'MySQLi $ ссылка, строка $ escapestr' в руководстве, и изменить свой код в' $ данным, «0 «'? Существует много примеров, если вы не можете понять синтаксис руководства. –

+0

да! Я изучаю php уже 2 месяца ... Я знаю, что это может показаться неразумным вообще!мои извинения, мне жаль, что я не пойму этот материал намного быстрее и быстрее. Это не так просто, особенно когда я следую учебнику. руки - отличный способ учиться, но для того, чтобы понять, что развивается, потребуется некоторое время. Поскольку я сказал свои извинения ... – user3001162

+1

BTW, ваша функция называется 'sanitize()', но более правильным именем будет 'mangle()' или 'corrupt()'. Если вы прочтете это в учебнике, я предлагаю вам найти другой ссылочный текст - этот код не имеет никакого смысла. –

ответ

1

От manual:

string mysqli_real_escape_string (mysqli $link , string $escapestr) 

Почему вам нужно подключение к базе данных, чтобы избежать строки ?!

Функция побег строка должен знать который кодирование подключения к базе данных используется, чтобы правильно избежать строк. Поэтому вам нужно передать соединение с функцией.

Функция mysqli_real_escape_string($mysqli, $str) есть что-то вроде этого в нем:

$encoding = $mysqli->getConnectionEncoding(); 

Вот почему вы должны пройти соединение.

Этого современный шаблон проектирования программного обеспечения (передать что-то, что необходимо внутри класса через конструктор или как пары функции, в) называется инъекции зависимостей (короткий DI модель).


еще лучше было бы использовать стиль ООП:

$con   = new mysqli(); 
$escapedString = $con->real_escape_string($string); 
4

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli это говорит само за себя ...

Вам необходимо предоставить mysqli экземпляр в качестве первого параметра, и ваша строка в качестве второго параметра.

E.g.

mysqli_real_escape_string($mysqli_conn, $data)

+0

, поэтому я беру его, установив соединение через файл init.php, недостаточно. Mysqli требует передать соединение в качестве параметра. спасибо Райан !! – user3001162

+1

Если вы не используете Оператор разрешения области действия (см. Http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php) 'mysqli :: real_escape_string ($ data)', где ссылка уже установлена экземпляр, на который вы ссылаетесь. – Ryan

Смежные вопросы