Какой цикл php более эффективен в моем случае при возврате результатов запроса? - PullRequest
0 голосов
/ 14 июля 2011

Какой из этих двух вариантов лучше в моем случае?

Цикл while:

function search_hotel($searchterm)
        {
    $query = $this->db->order_by("id", "desc")->like('name', $searchterm)->get('hotel_submits');
            $data = array();
            while($row = mysql_fetch_array($query))
            {
               $data[] = $row->name;
            }
            return $data;
}

Цикл Foreach:

function search_hotel($searchterm)
    {
        $query = $this->db->order_by("id", "desc")->like('name', $searchterm)->get('hotel_submits');
        $data = array();
        foreach ($query->result() as $row)
        {
           $data[] = $row->name;
        }
        return $data;             
        //return mysql_query("select * from hotel_submits where name LIKE '".$searchterm."'");
    }

Ответы [ 4 ]

3 голосов
/ 14 июля 2011

while технически более эффективен, чем foreach, но сравнивать его не стоит: в этом случае они оба практически идентичны.

1 голос
/ 14 июля 2011

При использовании фреймворка и его собственного класса адаптера БД кажется бессмысленным переключаться обратно на встроенные функции PHP в середине скрипта. Даже если адаптер CI и функции PHP mysql_* могут использовать одну и ту же библиотеку подключений к СУБД (mysql).

Я настоятельно рекомендую придерживаться версии Code Igniter (foreach ($query->result() as $row)). С точки зрения производительности, не должно быть никаких заметных отличий. Что касается архитектуры приложений, то она, безусловно, является намного чище, чтобы не смешивать интерфейсы доступа. Хотя это может сработать, это также может вызвать проблемы.

1 голос
/ 14 июля 2011

В вашем случае результатом, возвращаемым запросом, является массив.Это означает, что вы можете использовать оператор foreach или оператор while.

Просто обратите внимание, что оператор foreach оптимизирован для работы с массивами (а также с PHP5, объектами) и работает быстрее, чем оператор while.Хотя можно использовать для достижения того же эффекта, но он не столь эффективен , если вы хотите пройти через все элементы массива.

0 голосов
/ 14 июля 2011

Похоже, вы смешиваете синтаксис mysqli и mysql. Две библиотеки НЕ совместимы внутри. Вы не можете использовать дескриптор / оператор в одном и использовать его в другом. Обе библиотеки поддерживают полностью независимые соединения с базой данных.

Это означало бы, что первый будет быстрее, так как mysql_fetch_array () потерпит неудачу и внутренний цикл никогда не запустится. Но быстрее не значит «правильно».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...