При первом рассмотрении различий в применении функций семейства mysql * () и mysqli * () мне кажется, что
$seta = mysql_query("SELECT * FROM table WHERE field = $Filter", $database);
Может быть быстро заменено на:
$seta = mysqli_query($database, "SELECT * FROM table WHERE field = $Filter");
Точно так же, похоже, что
IF ($A = mysql_fetch_array($seta)) {
do {
//code here
} while ($A = mysql_fetch_array($seta));
}
Может быть заменено на:
IF ($A = mysqli_fetch_array($seta)) {
do {
//code here
} while ($A = mysqli_fetch_array($seta));
}
Будет ли это работать так, как я ожидаю? Как это работало до mysqli * ()?
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Я не спрашиваю, если я ДОЛЖЕН делай это, только если я МОЖНО сделай это. Я прекрасно знаю, что шлепать лейкопластырь на сломанной ноге бесполезно … Тем не менее, у меня не так много часов на кодирование / тестирование до демонстрации в марте, к которой готовятся.
Да, я понимаю, что это уязвимый код. Я не пойду на производство без гарантий. Я также понимаю, что я не использую всю мощь семейства функций mysqli * () таким образом.
Моя цель состоит в том, чтобы все правильно реорганизовать, когда нет такого тяжелого временного кризиса (Да, я знаю, знаменитые последние слова программиста). Мне просто нужен исправленный код для запуска демо-версии, и я могу удалить его.
Я очень надеюсь, что с работающим прототипом — как на месте, так и на сервере, который я раскручиваю, просто чтобы продемонстрировать необходимость обновлений программного обеспечения — я смогу оставить позади блюз PHP v4.x.
Проект:
PHP / MySQL лучше для поиска пользователей
Также проверено:
Как перейти с mysql * на mysqli *?
Миграция PHP с mysql * на mysqli
Выше заголовки были отделены подчеркиванием для предотвращения форматирования
Быстрый и грязный метод, с акцентом на грязный, это сделать это путем преобразования mysql_query
в mysqli_query
и так далее. Проблема в mysql_query
это действительно неуклюжий в использовании, поэтому сохранение, что стиль кодирования не поможет ничего очистить.
Хотя я бы настоятельно рекомендовал перейти на PDO, это более гибкий и функциональный уровень базы данных, если вы хотите mysqli
то, что вы хотите сделать, это нанять параметризованные запросы а также bind_param
добавить пользовательские данные в ваш запрос. Это решает подавляющее большинство Ошибки SQL-инъекций из ворот. Я бы также предложил использовать объектно-ориентированный интерфейс, чтобы ваш обновленный код был очевиден. Разница одного i
может быть легко упущен, плюс, как правило, менее многословно.
Другими словами, ваш замененный код выглядит так:
$stmt = $database->prepare("SELECT * FROM table WHERE field=?");
$stmt->bind_param('s', $filter);
$res = $stmt->execute();
Если вы дисциплинированы в этом, вы должны поймать все свои ошибки SQL.
PDO лучше из-за именованных параметров:
$stmt = $database->prepare("SELECT * FROM table WHERE field=:filter");
$res = $stmt->execute(array('filter' => $filter));
Это обычно означает меньше кода в долгосрочной перспективе.
Других решений пока нет …