2016-04-21 3 views
0

Я пытаюсь использовать функцию mysqli_real_escape_string() в запросе.Как правильно использовать mysqli_real_escape_string() Функция в запросе

Это мой текущий код:

$Product_Id = substr($prod_name, 14, (strlen($prod_name)-14)); 
$get_query = "SELECT P FROM Product WHERE Product_Id =' .mysql_real_escape_string((int)$Product_Id))"; 

Это не работает, он создает следующее сообщение об ошибке:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in

Но если я удалить функцию mysqli_real_escape_string мой код работает.

Так что это лучший способ сделать это, так как я пытаюсь остановить SQL-инъекцию.

+0

[Little Bobby] (http://bobby-tables.com/) говорит, что [ваш сценарий подвержен риску инъекций SQL.] (Http://stackoverflow.com/questions/60174/how-can-i SQL--предотвращение-инъекции-в-РНР). Даже [избегая строки] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) небезопасно! Подробнее о [подготовленных] (http://en.wikipedia.org/wiki/Prepared_statement) операциях для [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). –

+0

Прочтите [строки] (http://php.net/string). Вы цитируетесь неправильно. –

+0

Вы должны узнать разницу между SQL и PHP, поскольку они являются разными языками. 'mysql_real_escape_string()' является функцией PHP, а не функцией SQL. –

ответ

1

I am trying to use the mysqli_real_escape_string() Function in a query.

Но вы на самом деле нет. В вашем запросе вы используете mysql_real_escape_string().

Плюс этот запрос искажен, поэтому он все равно не сработает. Ваши котировки находятся в неправильном месте. Попробуйте следующее:

$get_query = "SELECT P FROM Product WHERE Product_Id = " . (int) mysqli_real_escape_string($Product_Id); 

Поскольку $Product_Id в настоящее время приводится к integer, вам не нужно обернуть его в кавычки в запросе (в предположении, Product_Id столбец является целым числом на основе, так как вы литья его в целое, я предполагаю, что это).

И перемещение типа cast (int) из аргумента в пределах mysqli_real_escape_string(), чтобы фактически предшествовать функции, является тем, что вы ищете. Хотя в настоящее время нет необходимости набрасывать $Product_Id, поскольку он избыточен и может фактически создавать больше проблем, чем он мог бы решить в некоторых случаях (Т.е. предположим, что $Product_Id было каким-то образом настроено на строку [$Product_Id = 'Marcus'], и затем вы передали ее целое число: (int) $Product_Id оно вернет 0, но без ошибок). Отрицательное целое также проскальзывает, и я предполагаю, что у вас нет отрицательных $Product_Id, верно? Есть гораздо лучшие способы обнаружения и обработки типов переменных до отправки их в запрос. Но мы можем попасть в это другое время.

В вашем запросе была ошибочная одинарная кавычка (WHERE Product_Id ='), которая вызывала ошибку синтаксического анализа.

+0

Спасибо, за это. Я новичок после учебника – Monroe

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