2013-07-17 3 views
3

Im new to stackoverflow. Поэтому, надеюсь, вы понимаете мой вопрос.Лучший способ писать вызовы MySQLI

На данный момент я пишу свои вызовы MySQLI как это - но это зависит от того, чего я пытаюсь достичь.

function getArticles($dbh) { 
    $query = "SELECT article_id,article_name,article_text FROM Articles"; 
    $result = mysqli_query($dbh,$query); 
    if(!mysqli_errno($dbh)) { 
     if(mysqli_num_rows($query) > 0) { 
      $articles = array(); 
      while($rows = mysqli_fetch_object($query) { 
       $articles[] = $rows; 
      } 
     } 
     mysqli_free_result($dbh) 
    } else { 
     echo mysqli_error($dbh); 
    } 
    return ($articles); 
} 

Затем я беру их и показываю, используя foreach() на моей странице вызова. Могу ли я сделать мои MySQL-вызовы лучше? Или как вы могли бы писать свои вызовы Mysql.

+1

Вы пробовали [объектно-ориентированный интерфейс] (http://www.php.net/manual/en/mysqli.quickstart.dual-interface.php)? Он может сделать этот вид кода более удобочитаемым. – tadman

+0

Да, я просто застрял с этим, так как я пишу свой код В процедуре – Programit

ответ

1

Я бы выбрал OO-путь тоже, но кроме этого, я бы обернул вызов запроса в отдельный класс или функцию. Затем вы можете написать функцию, которая принимает SQL-запрос и массив параметров в качестве входных данных, и возвращает массив с результатами или код ошибки или объект ошибки (или массив). Таким образом, такие функции, как getArticles, у которых, вероятно, есть десятки, содержат только одну строку кода, и вам не нужно каждый раз выполнять цикл и обработку ошибок.

Что-то вроде этого:

function executeQuery($dbh, $sql) 
{ 
    $result = mysqli_query($dbh, $sql); 
    if ($result !== false) 
    { 
    while($row = mysqli_fetch_object($query) { 
     $data[] = $row; 
    } 
    return $data; 
    } 
    return false; 

    // Or maybe return some error code or error information? 
    // Maybe throw an exception? 
    // You could return an array with info, but then you'd have to check 
    // if the resulting array contains data or error information... 
} 

function getArticles($dbh) { 
    return executeQuery(
    $dbh, 
    "SELECT article_id,article_name,article_text FROM Articles"); 
} 

Посмотрите, как она тянет всю логику от getArticles и обобщает его в ExecuteQuery?

+0

Спасибо за это, очень полезно. – Programit

0

Есть миллион различных способов сделать это, так что это действительно вопрос вкуса. Метод, который вы используете, является довольно стандартным способом «PHP для начинающих», но многие считают его громоздким, тем более, что он вам нужен, вам нужно будет переписать функцию запроса для каждого SQL-запроса, который вы делаете. Большинство людей хотели бы абстрагировать вещи так, чтобы все разные вещи, которые ваш код делает, покрываются простой простой функцией.

В этом простых, что может быть вопросом изменения коды на что-то вроде этого:

function query($dbh, $query) { 
     if($resource = mysqli_query($dbh,$query)) { 
      while($rows = mysqli_fetch_object($resource) { 
       $result[] = $rows; 
      } 
     } 
    } else { 
     echo mysqli_error($dbh); 
    } 
    return ($result); 
} 

Это не так много улучшения, чтобы быть честными, но дело в том, что теперь у вас есть глобальные функции что вы можете использовать все по всему сайту с всего лишь две строки кода, как это:

$sql = "SELECT * FROM MYTABLE"; 
$result = query($dbh,$sql); 

было бы гораздо лучше сделать как объект, который также создает экземпляр соединения с базой данных, и т.д., так что вы называете одну функцию или, возможно, класс, который делает все базы данных conne ction и query parsing.

+0

Спасибо за это Похоже, я создам некоторые функции GLOBAL MySQLI. – Programit

0

I рода-sorta зависит. Для одноразовых скриптов, независимо от того, используете ли вы OO или процедурный API, конечный результат практически одинаковый: в одном случае вы используете $dbh->method(...), а в другом вы получаете mysqli_method($dbh, ...). Синтаксический сахар - это все.

На чуть больший рулонный мой собственный код SQL я, как правило, прибегаю к моей текущей версии переизобрела SQL < -> PHP колеса, которое выглядит следующим образом:

  1. Единственный класс, который управляет соединение с БД, обеспечивает однотипный доступ к типу шаблонов. Методы берут объекты, описывающие тип выполняемого SQL-запроса. Предназначен для подготовленных операторов, настраивает БД для исключения исключений и т. Д., Чтобы получить более естественный вид кода OO.
  2. Интерфейс SQL-запросов, который предоставляет методы для извлечения SQL-данных, связанных параметров и получения результатов DB в строке за строкой (ассоциативный массив), обработки ошибок и т. Д. (Вы, как правило, хотите иметь дело с этим в случайном порядке -фазная основа).
  3. Реализации интерфейса SQL-запроса, обычно наследуемого от реализации по умолчанию (абстрактного базового класса) для удобства. Эти реализации обеспечивают дополнительную функциональность, в основном предоставляет объектную модель PHP поверх модели «ассоциативного массива». Обычно это либо набор объектов, либо просто один объект, и оба случая легко реализовать.

Результат этапа 3 заключается в том, что вместо выполнения SQL вы выполняете ленивую загрузку ресурсов. Вы можете создавать объекты типа запроса, а загрузка (выполнение запроса) может быть отложена до некоторой более поздней точки общего потока управления PHP-кода. Это свойство помогает полностью отделить данные от потока управления &. Это также упрощает работу с прозрачным контентом контента, поскольку это будет просто включать другую версию ваших презентационных объектов.

+0

Благодарим за это, я относительно новичок в PHP и еще не изучил ООП. Когда было бы хорошо изучить его? – Programit

+1

Я бы сказал, что PHP не такой отличный язык для изучения ООП. Причина в том, что наиболее распространенные функции (манипуляции с строкой/массивом) по-прежнему довольно процедурные, независимо от того, что вы делаете. Другие языки допускают более последовательный подход здесь. Однако, как только вы узнали ООП, определенно стоит узнать о реализации концепции PHP (например, о том, как делать ООП в PHP). – user268396

+0

Также следует изучить подготовленные MySQLi заявления - они лучше? – Programit

Смежные вопросы