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