2017-01-17 4 views
0

На первый взгляд различий в применении MYSQL *() и семейств функций Mysqli *(), то мне кажется, чтоPHP/mysql: меняет (SELECT, {resource}) на ({resource}, SELECT) жизнеспособный временный патч для 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 *()?

ОБРАТИТЕ ВНИМАНИЕ: Я не спрашиваю, если я ДОЛЖНА сделать это, только если я CAN сделать это. Я прекрасно знаю, что хлопать бандаж на сломанной ноге бесполезно ... Тем не менее, у меня не так много часов на время кодирования/тестирования до того, как в марте этого месяца начнется демонстрация.

Да, я понимаю, что это уязвимый код. Я не буду заниматься производством без каких-либо гарантий. Я также понимаю, что я не использую всю силу семейства функций mysqli *() таким образом.

Моя цель - полностью реорганизовать все правильно, когда нет такого тяжелого временного хруста (да, я знаю, знаменитые последние слова программиста). Мне просто нужен исправленный код для запуска Demo, после чего я могу уйти в отставку.

У меня есть большие надежды на то, что с рабочим прототипом - как на месте, так и на сервере, я вращаюсь, чтобы продемонстрировать необходимость в обновлениях программного обеспечения - я смогу оставить PHP v4.x блюз за.

Проект:
PHP/MySQL better user searching

Также проверено:
How to upgrade from mysql* to mysqli*?
PHP Migrating from mysql* to mysqli
Над названиями были trimed из подчеркиванием, чтобы предотвратить форматирование

+1

В чем вопрос/проблема? * «Я не прошу, если я ДОЛЖЕН это сделать, только если я МОГУ это сделать». * - что вас останавливает? –

+0

@ fred-ii Прости меня, я думал, что мой вопрос был ясен. Сообщение отредактировано. Я спрашиваю, правильно ли я понимаю синтаксис/действие семейств функций в самом основном смысле. –

+0

* «Будет ли это работать так, как я его ожидаю? Когда он работал до mysqli *()?» * - Попробуйте это на тестовом db/script. Если нет синтаксических ошибок, я не вижу, как это произойдет. Просто помните, что в качестве первого аргумента передаются несколько функций 'mysqli_', которые требуют соединения db. Как только вы это сделаете, все должно идти так, как планировалось. Просто помните, что вы не можете смешивать различные API MySQL. –

ответ

2

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

Хотя я настоятельно рекомендую переключиться на PDO, это более гибкий и способный слой базы данных, если вы хотите mysqli то, что вы хотите сделать, это использовать parameterized queries и bind_param добавить пользовательские данные в запросе. Это решает подавляющее большинство SQL injection bugs вне ворот. Я бы также предложил использовать объектно-ориентированный интерфейс, чтобы ваш обновленный код был очевиден. Разницу в одном i можно легко упускать из виду, а это, как правило, менее многословно.

Другими словами, ваш заменить код выглядит следующим образом:

$stmt = $database->prepare("SELECT * FROM table WHERE field=?"); 
$stmt->bind_param('s', $filter); 
$res = $stmt->execute(); 

Если вы дисциплинированный об этом вы должны поймать все ошибки SQL.

ПДО лучше из названных параметров:

$stmt = $database->prepare("SELECT * FROM table WHERE field=:filter"); 
$res = $stmt->execute(array('filter' => $filter)); 

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

+0

Хммм. Прежде всего, спасибо. Суть быстрого и грязного падения в замене состояла в том, чтобы сэкономить время для тестирования. Я не полностью понимаю ваш ответ, хотя я знаю, что должен. Я надеюсь клонировать локальную среду IDE, и это означает использование mysqli *(), чтобы заставить его работать, где я могу протестировать. Если я ничего не изменю, я могу вернуться на производственный сервер, и после того, как демо будет исправлено правильно. Я не думаю, что у меня есть время для этого в первый раз. –

+0

Убедитесь, что у вас есть контроль над версиями. Всякий раз, когда вы вносите изменения в это повсеместное распространение, вы захотите иметь возможность * diff * вашего кода и убедиться, что вы не калечили другие вещи. Посмотрите на [PHP на правильном пути] (http://phptherightway.com), чтобы вы могли улучшить свою базу кода, пока вы хорошо смотрите на нее. – tadman

+0

Абсолютно. К счастью, весь проект составляет менее 10 тыс. Строк, и, хотя у нас был кто-то «CSS», он пару лет назад, базовый код - все мое. –

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