Вы, кажется, вызываете mysqli_stmt :: fetch (), но ожидаете, что он будет действовать как PDOStatement::fetch()
.
Несмотря на то, что функции имеют одно и то же имя, они имеют разные расширения, и вы не можете смешивать их. Если вы хотите использовать функцию PDO fetch (), вам следует подключиться к базе данных с помощью PDO.
Кроме того, функция mysqli_stmt::fetch()
не возвращает строку данных. Он полагается на привязку результатов к переменным .
Я предпочитаю стиль PDO, где PDOStatement::fetch()
возвращает строку. Я рекомендую вам конвертировать код для использования PDO повсеместно.
Безудержный запрос является запросом, время выполнения которого занимает больше времени, чем время выполнения, оцененное оптимизатором. Безудержные запросы могут привести к израсходованию всех Ваших циклов процессора или других ресурсов во время его выполнения.
Это - запрос, который начинает работать и никогда не возвращается (для некоторого значения "никогда").
Обычно это означает, что запрос не использует индекс, это, как предполагается, или использование плохого метода соединения, или плохого порядка соединения или выполнения набора преобразования строк / сравнение.
Возможно записать SQL-запросы, которые занимают недели/годы для выполнения.
Я применяю этот термин конкретно к запросу, который инициировал, обычно случайно, поведение со временем выполнения неожиданной сложности. Если Вы ожидаете, что запрос возьмет O (n * m) (то есть, единственное соединение между двумя таблицами), и он берет O (n * n * m) затем, я назвал бы его безудержным, даже если n * n * m является приемлемо маленьким в данном случае. Чаще всего это испытано, поскольку запрос ожидал брать O (журнал (n) * журнал (m)) берущий O (n * n * m * m), который оказывается неприемлемо сложным.
Безудержные запросы имеют много характеристик - выбирают некоторых от:
Во всех случаях они имеют тенденцию предотвращать других пользователей, делающих любую полезную работу.
Я полагаю, что это означает тот, который Вы выполняете, и никогда не возвращается. Например, делая избранный оператор, который никогда не возвращается с результатами (или действительно занимает много времени, чтобы сделать так).
Когда запрос присоединяется к большему количеству строк, чем необходимы на грани избытка.
Из Википедии: язык делает слишком легким сделать Декартово соединение (присоединяющийся ко всем возможным комбинациям), который приводит к "безудержным" наборам результатов, когда операторы Where вводятся с опечаткой. Декартовы соединения так редко используются на практике, что требование явного ДЕКАРТОВА ключевого слова может быть гарантировано. 1992 SQL представил ключевое слово ПЕРЕКРЕСТНОГО ОБЪЕДИНЕНИЯ, которое позволяет пользователю ясно давать понять, что декартово соединение предназначается, но краткое "соединение запятой" без предиката является все еще приемлемым синтаксисом.
Безудержный запрос обычно является запросом, который занял бы много времени и / или много системных ресурсов (ЦП, Память, и т.д.) для завершения.
Общие причины могут быть:
"Безудержный" запрос может evenually возвратиться, он просто занял бы слишком много времени или слишком много системных ресурсов для создания этого стоящим.
Только, чтобы упомянуть, что безудержный запрос мог произойти, если плохо записанный триггер включен. Триггеры должны смочь обработать мультизапись, вставляет/обновляет или deltes, и некоторые люди, как было известно, сделали это с помощью курсора, а не с помощью основанного на наборе языка. Это могло casue запрос для обновления большого количества записей на беглеца. Недавно смог уменьшить время запроса для большого набора записей, обновляемых из-за 40 минут к 40 секундам путем замены одного такого триггера.
Другие причины включают случайные перекрестные объединения (зафиксированный с отличным), nonsargable, где пункты, использование подзапросов или использовал определенные функции, неправильную индексацию, статистические данные, которые не были обновлены, использование курсоров, недостаточного определения в соединении или где. И вперед и вперед.