Создание функции для выбора из MySQL, как моя? - PullRequest
1 голос
/ 17 апреля 2010

Это мой первый раз. Буду признателен за любые мысли, советы, а за что нет. Как я могу улучшить это? В конечном счете, я не хочу, чтобы в моем сценарии было так много отборов. Я не знаю, из чего должен состоять тип функции MySQL. Также были бы полезны любые входные данные о том, что я должен включить, например mysql_query ().

функция mysqlSelectCodes ($ таблица, $ where, $ order, $ limit) {$ sql = "ВЫБРАТЬ * ОТ $table ГДЕ $where ЗАКАЗАТЬ ПО $order LIMIT $limit "или умирают (mysql_error ());

}

Ответы [ 3 ]

2 голосов
/ 17 апреля 2010

Этот код фактически ни к чему. Вы просто строите строку запроса, но не выполняете запрос.

Если никаких дополнительных мер не предпринимается, этот код очень подвержен SQL-инъекциям атак.

Возможно, вы захотите прочитать руководство по PHP для PDO . Это поможет вам.

1 голос
/ 18 апреля 2010

Мой совет: я бы не стал этого делать. Помимо конкретных проблем, на которые указывали другие (внедрение SQL, забыл вернуться), у меня есть еще одна проблема: вы предполагаете, что все запросы будут хорошо вписываться в эту форму. Ограничения вашей функции включают в себя:

  • Нет поддержки объединения нескольких таблиц.
  • Нет поддержки для внутреннего выбора.
  • Вы всегда выбираете все столбцы, используя * - плохая идея в целом. У вас нет поддержки выбора только некоторых столбцов.
  • Нет поддержки для GROUP BY.
  • Если вам нужны все строки, вам все равно нужно передать предложение where, например, «1 = 1».
  • и т.д ...

Теперь вы можете расширить свою функцию, чтобы учесть эти другие возможности, но она станет более сложной, и вы просто получите собственный язык для создания SQL-запросов, но не похожий на SQL. Иногда хорошей идеей является создание собственного языка для доступа к базе данных SQL, но чаще всего это просто пустая трата вашего времени, и другим будет трудно понять ваш код. При возможности придерживайтесь стандартных библиотек и стандартных интерфейсов. Если вы хотите избежать использования SQL, вы можете вместо этого использовать Object-Relational Mapping (ORM).

Если вы хотите не использовать SQL в своем коде, попробуйте создать интерфейс, который фактически делает что-то специфическое для вашего приложения (getFriends, getPostsByUser), а не что-то слишком общее.

1 голос
/ 17 апреля 2010

Хорошо, что вы просите о помощи, пожалуйста, не позволяйте тому, что я собираюсь сказать, обескуражить вас - продолжайте работать над этим! Есть много проблем с этим, поэтому я просто выброшу несколько:

  1. это на самом деле ничего не делает, потому что ничего не возвращает (если $ sql глобально, это не должно быть)
  2. en.wikipedia.org / вики / SQL_injection
  3. or die(...) не будет принадлежать такому строителю строк - он не будет обрабатывать сбои SQL здесь, поскольку все, что он проверяет, - это если данная строка завершается успешно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...