2013-04-03 2 views
-1

Как я могу судить, все функции mysql (не используя расширение MySQLi) уже не значительны, они в основном устарели. Поэтому я использую расширение MySQLi. И для нового скрипта я кодирую, я хочу знать, должен ли я избегать строк перед использованием подготовленных операторов. Если вам нужно убежать, тогда что это лучший способ сделать это?Очистка строки перед входом в mysql PHP

Моя текущая функция следующая, но я не считаю ее действительной или даже необходимой.

function clean($string){ 
    return mysql_real_escape_string($string); 
} 
+1

Функции MySQL были заменены функциями MySQLi (и связью других функций доступа к базе данных). 'mysql_real_escape_string' все еще работает, это просто, что он находится в устаревшем пакете. – zneak

ответ

1

Хорошо, поэтому вы уже выяснили, что не должны использовать функции mysql_xxx(). Это хорошо.

Альтернативами являются библиотеки mysqli и PDO.

Обе эти библиотеки предлагают эквивалентные функции mysql_real_escape_string, но они также предлагают лучшую альтернативу, называемую параметризованными запросами (или подготовленными заявлениями).

Это альтернативный метод написания запросов с переменными, который считается гораздо лучше, чем использование метода escape-последовательности.

Что происходит, так это то, что вы определяете свой запрос с помощью заполнителей, а не переменных; что-то вроде этого:

SELECT * FROM table WHERE id = :id 

где :id является заполнитель.

Вы вызываете функцию с запросом, как указано выше, с помощью заполнителей, а затем разделяете вызовы для связывания переменных с каждым из заполнителей.

Точный код для этого отличается от библиотек mysqli и PDO, но в обоих случаях переменные отправляются на сервер БД отдельно от запроса, и, следовательно, нет никакой вероятности атаки SQL-инъекции.

Библиотека PDO, как правило, считается лучшим вариантом.Вот некоторые ссылки на хорошие сайты с примерами того, как написать код:

Надежда, что помогает.

1

Если есть лучший способ сделать это, пожалуйста, скажите мне, как, спасибо.

да

function format_mysql_string($string){ 
    return "'".mysql_real_escape_string($string)."'"; 
} 
  • он не имеет слово «чистый» в это имя, потому что mysql_real_escape_string не «чистить» ничего.
  • у него есть слова «формат» и «строка» в имени, потому что эту функцию нужно использовать для форматирования строк SQL, и ничего больше.
  • он добавляет кавычки, потому что форматирование строк требует кавычек. Поэтому ваш запрос не удастся, если вы попытаетесь отформатировать что-нибудь еще - так что вы узнаете, что вам нужна другая мера.
Смежные вопросы