[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MySQLi или MySQL >>> вот в чем вопрос.
Shkiper
Всем здрасти. Недавно наткнулся на статью про MySQLi. Там говориться что он гораздо лучше, безопаснее и "легкий". Так ли это??? Стоит ли на него переходить??? Если стоит то где можно взять документацию на русском???



Спустя 3 минуты, 1 секунда (20.04.2012 - 15:16) m4a1fox написал(а):
Deert
Цитата
MySQLi или MySQL >>> вот в чем вопрос.

PDO

Спустя 3 минуты, 35 секунд (20.04.2012 - 15:20) killer8080 написал(а):
Цитата
Recommended API

It is recommended to use either the mysqli or PDO_MySQL extensions. It is not recommended to use the old mysql extension for new development.

Спустя 15 секунд (20.04.2012 - 15:20) Shkiper написал(а):
А мануальчик, если можно???

Спустя 4 минуты, 56 секунд (20.04.2012 - 15:25) dadli написал(а):

Спустя 1 минута (20.04.2012 - 15:26) killer8080 написал(а):
Цитата (Deert @ 20.04.2012 - 16:20)
А мануальчик, если можно???

Спустя 55 секунд (20.04.2012 - 15:27) Shkiper написал(а):
Цитата
Всем здрасти. Недавно наткнулся на статью про MySQLi. Там говориться что он гораздо лучше, безопаснее и "легкий". Так ли это??? Стоит ли на него переходить??? Если стоит то где можно взять документацию на русском???

Спустя 5 минут, 59 секунд (20.04.2012 - 15:33) killer8080 написал(а):
переходить на него стоит, хотя бы потому, что это рекомендуют разработчики PHP. Это значит что в скором времени старое расширение попадет в deprecated.
На счет русской документации не знаю, посмотри на php.su или php.ru, может есть.

Спустя 11 минут, 11 секунд (20.04.2012 - 15:44) glock18 написал(а):
Цитата (killer8080 @ 20.04.2012 - 13:33)
На счет русской документации не знаю, посмотри на php.su или php.ru, может есть.


дк ты ж ссылку дал выше на php.net на русском smile.gif

Спустя 5 минут, 34 секунды (20.04.2012 - 15:50) inpost написал(а):
killer8080
Я не думаю, что старое расширение mysql попадёт в dsprecated, потому что новичков гораздо сложнее учить на mysqli, так как оно тяжелее по своей природе. Пока не изменят функции и не упростят их...

Спустя 1 час, 12 минут, 40 секунд (20.04.2012 - 17:02) glock18 написал(а):
Цитата (inpost @ 20.04.2012 - 13:50)
killer8080
Я не думаю, что старое расширение mysql попадёт в dsprecated, потому что новичков гораздо сложнее учить на mysqli, так как оно тяжелее по своей природе. Пока не изменят функции и не упростят их...

а чего их упрощать то. проще и так некуда

Спустя 4 минуты, 4 секунды (20.04.2012 - 17:07) inpost написал(а):
glock18
невозможность работать напрямую. Процедурка требует постоянно первый аргумент указывать, что портит впечатление, если работать через класс, то там не доступна возможность статичного обращения. В итоге работаю через оболочку.

Спустя 20 часов, 51 минута, 50 секунд (21.04.2012 - 13:58) killer8080 написал(а):
Цитата (glock18 @ 20.04.2012 - 16:44)
дк ты ж ссылку дал выше на php.net на русском

там далеко не все успели перевести на русский smile.gif
Цитата (inpost @ 20.04.2012 - 16:50)
killer8080
Я не думаю, что старое расширение mysql попадёт в dsprecated, потому что новичков гораздо сложнее учить на mysqli, так как оно тяжелее по своей природе. Пока не изменят функции и не упростят их...

Думая это лишь вопрос времени и версии PHP. Если разработчики не рекомендуют его использовать, значит рано или поздно оно таки попадет в deprecated. Да и сложности там надуманные. Если новичкам не говорить, что mysqli сложное, то им будет совершенно пофиг, чего не знать smile.gif
Если уж говорить о заботе о новичках, разрабов же это не остановило, когда в deprecated записали magic quotes. Никого не волновало, что с переходом на новую версию, появится куча дырявых, говнокодерских сайтов. wink.gif
Цитата (inpost @ 20.04.2012 - 18:07)
невозможность работать напрямую. Процедурка требует постоянно первый аргумент указывать, что портит впечатление

Ну и что? Файловые функции то же требуют постоянно указывать ссылку на ресурс первым аргументом, никого же это не смущает smile.gif
Цитата (inpost @ 20.04.2012 - 18:07)
, если работать через класс, то там не доступна возможность статичного обращения. В итоге работаю через оболочку.

не понял о чем ты blink.gif синглтон вроде не отменяли.

Спустя 41 минута, 32 секунды (21.04.2012 - 14:40) inpost написал(а):
killer8080
Так я и сказал, что использую оболочку синглтон.

Ну как бы сказать, если человек умный, он спросит, почему mysql указывает 1 параметр, а mysqli постоянно надо писать 2 параметра, когда по умолчанию всегда работаю с одним и тем же кодом и выполняю одни и те же действия.

В каждой из функций надо писать лишние символы, а хочется с прогрессом сокращать длину кода, а не увеличивать её впустую...

Вот смотри аналогию, ты общаешься, и каждый раз говоришь свои мысли, ведь они в твоей голове, поэтому абсолютно во всех предложениях вставляй в начале: "я думаю" или "я считаю". Это будет напрягать как тебя, так и окружающих.. Вот твоя фраза:
"Я думаю, Ну и что? Я думаю, Файловые функции то же требуют постоянно указывать ссылку на ресурс первым аргументом, никого же это не смущает , я думаю, что не понял о чем ты , я думаю, что синглтон вроде не отменяли.".
Вот так и тут, нет смысла того, что итак понятно. А кто работает с несколькими базами, у тех и уровень на порядок выше и они будут через оболочки различные работать.

Вот банальный глупый пример недоработки:
mysql_query. Если до этого соединения с БД не было, то берутся параметры по умолчанию из ini для коннекта. При этом select_db нельзя указывать через настройки. Итого функция автоматического коннекта вообще утрачивает смысл в mysql_query. То есть при select_db при отсутствии коннекта - подключится. А при mysql_query - подключится, но выбрать БД не сможет, потому что разрешено указывать: хост,имя,пароль, но не Базу Данных.

Аналогия с mysqli , то есть там указывается, что 1,2,3,4 параметры являются необязательными, в таком случае параметр берётся по умолчанию. При этом указать можно 1,2 и 3-ий параметр, а 4-ый в обязательном порядке необходимо указать(!). Какой смысл первых трёх по умолчанию, если в случае необходимого указания четвертого - мы автоматом будем указывать первые 3...
Ну да, если исключением из правил - свои сервера, в таком случае и первые 3 параметра так же должны быть связаны с четвертым. А то первые 3 можно указать на любом хостинге, а 4-ый только на своём, вот и лазишь по инету ищешь ответ банально на то, чего разрабы не предусмотрели.

Спустя 9 минут, 29 секунд (21.04.2012 - 14:49) Shkiper написал(а):
Старенький, добренький MySQL больше используют и он более популярен. Лучше использовать, а потом можно будет и перейти на MySQLi(наверно). Да и вот что хотел спросить. Смотря, в глупом прошлом, уроки попова, я кое-что заметил. На конце MySLQ запроса он постоянно пишет $bd, в которой заключаеться подключение к БД. Если не указывать $bd, то оно и так будет работать, хотел узнать обязательно ли её еказывать или это просто избыточность кода ???? dry.gif

Спустя 2 минуты, 29 секунд (21.04.2012 - 14:52) inpost написал(а):
Deert
Он необходим для указания с какой БД ты работаешь, если ты работаешь с несколькими. Если сайт на одной, то он является необязательным параметром, о чём свидетельствуют квадратные скобки на php.net.
Если он нужен был, то без него была бы ошибка. А необязательные дополнительные параметры - на усмотрение автора для расширения функционала стандартной функции. Сейчас мои самописные функции так же имеют как обязательные так и не обязательные параметры. Это лишь расширение возможного функционала.

Спустя 25 минут, 8 секунд (21.04.2012 - 15:17) killer8080 написал(а):
Цитата (inpost @ 21.04.2012 - 15:40)
Ну как бы сказать, если человек умный, он спросит, почему mysql указывает 1 параметр, а mysqli постоянно надо писать 2 параметра, когда по умолчанию всегда работаю с одним и тем же кодом и выполняю одни и те же действия.

Объяснение очень простое. Myqsli изначально объектный, процедурный стиль введен как раз для того, чтобы облегчить переход со старого расширения, это всего лишь интерфейс к объектам (грубо говоря). По тому и нужно передавать ссылку на объект. Вообще нет смысла использовать процедурный стиль, ничего сложного в объектном нет.
Вот простой пример на классическом mysql расширении


mysql_connect('localhost', 'root', '');
mysql_select_db('dbname');
$result = mysql_query("SELECT * FROM `table`");
if(mysql_num_rows($result) > 0){
while($row = mysql_fetch_assoc($result)){
...
}
}


и вот его аналог на mysqli в объектном стиле
$db = new mysqli('localhost', 'root', '', 'dbname');
$result = $db->query("SELECT * FROM `table`");
if($result->num_rows > 0){
while($row = $result->fetch_assoc()){
...
}
}

Чем он сложнее процедурного?

Цитата (inpost @ 21.04.2012 - 15:40)
Вот банальный глупый пример недоработки:
mysql_query. Если до этого соединения с БД не было, то берутся параметры по умолчанию из ini для коннекта. При этом select_db нельзя указывать через настройки. Итого функция автоматического коннекта вообще утрачивает смысл в mysql_query. То есть при select_db при отсутствии коннекта - подключится. А при mysql_query - подключится, но выбрать БД не сможет, потому что разрешено указывать: хост,имя,пароль, но не Базу Данных.

ну это камень в огород старого расширения. Хотя я никогда не считал такой стиль работы правильным, всегда в начале устанавливаю соединение, а только потом использую
Цитата (inpost @ 21.04.2012 - 15:40)
Аналогия с mysqli , то есть там указывается, что 1,2,3,4 параметры являются необязательными, в таком случае параметр берётся по умолчанию. При этом указать можно 1,2 и 3-ий параметр, а 4-ый в обязательном порядке необходимо указать(!). Какой смысл первых трёх по умолчанию, если в случае необходимого указания четвертого - мы автоматом будем указывать первые 3...

отчего же? Совсем не обязательно указывать предыдущие аргументы
$db = new mysqli(null, 'root', null, 'dbname');


PS че то подсветка синтаксиса глючит :)

Спустя 2 часа, 18 минут, 51 секунда (21.04.2012 - 17:36) inpost написал(а):
killer8080
Внутри других функций нельзя же обращаться непосредственно к $db из твоего примера.
То есть $db->query уже не будет работать. mysqli_query то можно. Как в таком случае быть? Я сделал через синглон-оболочку, сделал класс статичным, и к тему уже обращаюсь из других функций и классов. Но это уже не та простота, что ты показал выше.

Спустя 45 минут, 27 секунд (21.04.2012 - 18:21) Shkiper написал(а):
blink.gif

Спустя 4 часа, 57 минут, 39 секунд (21.04.2012 - 23:19) killer8080 написал(а):
Цитата (inpost @ 21.04.2012 - 18:36)
Внутри других функций нельзя же обращаться непосредственно к $db из твоего примера.

global $db;
Цитата (inpost @ 21.04.2012 - 18:36)
То есть $db->query уже не будет работать. mysqli_query то можно.

mysqli_query() так же требует наличие переменной указывающей на соединение, так что в этом плане процедурный стиль mysqli не имеет преимуществ перед объектным.
Цитата (inpost @ 21.04.2012 - 18:36)
Я сделал через синглон-оболочку, сделал класс статичным, и к тему уже обращаюсь из других функций и классов. Но это уже не та простота, что ты показал выше.

В конечном итоге, в продакшине все равно же не будешь работать напрямую с нативными функциями. user posted image

Спустя 23 минуты, 35 секунд (21.04.2012 - 23:43) inpost написал(а):
global $db; - лишняя строчка.
первый аргумент - лишняя часть.

Спустя 6 часов, 35 минут, 1 секунда (22.04.2012 - 06:18) Shkiper написал(а):
rolleyes.gif
Быстрый ответ:

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