Здравствуйте. В PHP как я понял есть 2 стиля написания кода для MySQL, это процедурный и объектно-ориентированный. В чем между ними разница и что лучше? PHP: #Процедурный стиль $mysqli_query ... #Объектно-ориентированный $mysqli->query ...
Разницы в плане работы и возможностей никакой нет. Есть разница в синтаксисе. Ни один из вариантов не лучше другого. Используй тот, который лучше вписывается в твой код и который тебе ближе. В любой момент можно переписать с одного стиля на другой без проблем и последствий. --- Добавлено --- В плане реализации могу сказать, что объектный стиль - это обертка над процедурным. Использование процедурного требует хранение в некоем глобальном хранилище линк на соединение, чтобы всегда его передавать в функцию. Объектный стиль позволяет хранить линк в объекте. Но теперь нам надо хранить где-то глобально сам объект
Я с телефона, по этому тут развернутый ответ туго писать будет. Зайди в поиск по форуму. Вбей PDO и укажи мой ник в поле автора сообщений. Я не так давно очень развернуто отвечал по такой же теме.
Скорее наоборот. И доках первый параметр в процедурном варианте указан, как экземпляр mysqli, а не как resource
Однако, ты прав. Что еще раз доказывает, что разницы, окромя синтаксиса, вообще нет. И да, я добрался до компа. Вот тебе ответ на вопрос по выбору между PDO и Mysqli.
Есть. Заодно берет строку в кавычки. Типа, ты всё равно экранируешь чтобы в запрос пихать, к чему набирать кавычки.
ммм. да. берёт строку в кавычки. А мне не надо кавычки. Я хочу например название таблицы пихать из переменной. Как мне быть?
Есть подозрение, что символы, требующие экранирования, не могут быть частью имени таблицы. То есть не может быть так, что таблица существует, но чтобы к ней обратиться, надо эскейпнуть строку. Если речь идет о защите от инъекции, то трудно представить ситуацию, когда разрешено задавать извне любое имя таблицы, но страшно за инъекцию. Скорее всего, это бы работало как-то так: Код (PHP): if (false === in_array($name, $allowedTables)) return "Wrong table name!";
Я эти отмазки тоже читал. =) По факту это предложение захардкодить массив с названиями таблиц и полей в коде приложения. Это... Ну... Подмена понятий.
мм. ок. это канает. всего один запрос накладных расходов. терпимо. жить можно. ладно. уговорил. а сколько накладных расходов делает пдо для prepared statements?
В режиме эмуляции он не делает запросы в базу для этого. В режиме нормальных подготовленных запросов - ну получается тоже на один запрос больше. Но я не агитирую за PDO, просто пишу, что есть. Я сам, если пишу без фреймворка или на фреймворке без слоя БД, использую mysqli обычно --- Добавлено --- P.S. ещё не разу не приходилось подставлять имя таблицы из переменной, в которой данные, пришедшие от пользователя. Опишите хоть ситуацию, в которой это может понадобится. Свой PMA или adminer я писать не собираюсь
я не хочу думать о том, откуда в переменную данные приползли. От пользователя или из бд даже - всё возможно опошлить. Так что в случае mysqli я просто эсейплю всё подряд. А в случае PDO эта задача решается сложнее. Но это прямо скажем задача редкая, да. Просто столкнулся с ней на днях. Забей.