[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Переход с mysql на mysqli
Страницы: 1, 2, 3
Игорь_Vasinsky
Безболезненный переход с mysql на mysqli

До сих пор встречаются темы где люди всё ещё используют функции mysql для работы с БД.

Мало того они не умело оперируют этими функциями и алгоритмами - так ещё и не в курсе или не понимают что mysql - более не будет поддерживаться разработчиками.

Цитата
This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:


http://php.net/manual/en/function.mysql-db-query.php

Как видно из сообщения на сайте php.net нам предлагают воспользоватся альтернативными вариантами для работы с БД - MySQLi и PDO

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

Не будем вдаваться в подробности этих споров - если есть интерес - воспользуйтесь гуглом https://www.google.ru/webhp?hl=ru&tab=ww#hl...iw=1366&bih=659

Моё мнение простое: те кто привык по своей практике работать с фреймворками или CMSками - безусловно выберут (или уже давно выбрали) PDO, остальные смертные, которые по большей степени пишут на процедурке, избегая синтаксиса ООП - mysqli, т.к. переход на mysqli значительно проще - к тому же есть плюс - MySQLI имеет и процедурный стиль и объектно ориентировочный - т.е. если вы решите начать двигаться в сторону ООП - mysqli -так же останется вашей верной спутницей.

Кстати mysqli так же умеет работать с подготовленными запросами (http://www.php.net/manual/ru/mysqli.prepare.php, http://www.php.net/manual/ru/mysqli-stmt.bind-param.php) как и PDO.

Итак приступим.

Для наглядности я буду приводить аналогии mysql - mysqli (процедурный стиль)


Первое же отличие в коннекте к БД. в MySQLi нет необходимости отдельно выбирать в БД в отличии от своей младшей сестрёнки (mysql_select_db) - нужная База указывается сразу при коннекта. (но функция выбора есть на всяк случай)


Подключение к БД

mysql

$link = mysql_connect('server', 'user', 'password');

$dbSelect = mysql_select_db('db');


mysqli

$link = mysqli_connect('server', 'user', 'password', 'db');


Далее хочу отметить, что большинство функций mysqli в качестве первого параметра используют идентификатор подключения (только в процедурном варианте)

даже популярный момент при отладке

or die mysqli_error($link)



Далее запросы в БД

mysql

$query = mysql_query($sql);


mysqli

$query = mysqli_query($link, $sql)


Кроме этого в арсенале mysqli есть в своём роде "спасательный круг" - возможность делать мультизапросы (сразу несколько запросов) - достаточно запросы разделит двоеточием
$sql = "query1; query2;queryN";
$query = mysqli_multi_query($link, $sql);


После мульти запроса я рекомендовал бы освободить память от результатов последнего запроса, иначе есть вероятность получить сообщение вида
Commands out of sync; you can't run this command now:


Очистить буфер можно так:
while(mysqli_next_result($link)){ 
mysqli_store_result($link);
}


В принципе это наверно и есть основные отличия в функционале этих 2х библиотек, в наиболее популярных моментах, при работе с ними

Здесь размещён топик с FAQ по ошибкам при работе с mysql и mysqli. http://phpforum.ru/index.php?showtopic=51167


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

Коннект
$mysqli = new mysqli('server', 'user', 'pass', 'db');

Запрос
$query = $mysqli->query();

Кол-во строк в ответе
$num = $mysqli->num_rows;


и прочее.

Ка вы видите - в объектно ориентировочном варианте - ссылаться на идентификатор коннекта - не нужно - т.к. работа идёт с нужным экземпляром класса.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.