PHP / mysql: меняется (SELECT, {resource}) на ({resource}, SELECT) жизнеспособный временный патч для mysql_ * до mysqli_ *?

При первом рассмотрении различий в применении функций семейства 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
Выше заголовки были отделены подчеркиванием для предотвращения форматирования

0

Решение

Быстрый и грязный метод, с акцентом на грязный, это сделать это путем преобразования 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));

Это обычно означает меньше кода в долгосрочной перспективе.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]