Intereting Posts
Как нарисовать график в PHP? Как получить информацию о профиле пользователя с помощью токена доступа в php-sdk Компонент CakePHP Auth Не регистрируется при использовании $ this-> Auth-> login (); PHP: разделите определенный тег из строки HTML? как обновить исходный код файла php через другой php-файл Мобильный переадресация с использованием htaccess CakePHP, установить переменную среды «cake»? Веб-приложение Codeigniter не работает с Linux, но здесь, на окнах, прекрасно ZFCUser и bjyauthorize – Как оставить авторизацию для целевой страницы Индексный pdf-файл с использованием Apache Solr codeigniter возвращает "Message: Undefined property: Welcome :: $ load" пытается загрузить вспомогательную библиотеку lib Behat 3 – как получить пользовательское расширение в контексте Zend Form – Как установить значения на элементах подформы? Как я могу запросить свойство страны, например, язык из DBpedia? Контрольные контроллеры в Symfony2 с доктриной

Закрытие соединения в цикле

У меня есть следующий код:

/* Get the 10 latest posts from users you're following */ $stmt = $cxn->prepare('SELECT * FROM posts WHERE user_id IN (SELECT following_id FROM follows WHERE user_id = ?) ORDER BY datetime DESC LIMIT 15'); $stmt->bind_param('i', $user_id); $stmt->execute(); $result = $stmt->get_result(); /* If a result exists, continue. */ if ($result->num_rows) { while ($row = $result->fetch_assoc()) { /* Get the user's username from their id */ $stmt = $cxn->prepare('SELECT username FROM users WHERE user_id = ?'); $stmt->bind_param('i', $row['user_id']); $stmt->execute(); $stmt->bind_result($username); $stmt->fetch(); $stmt->close(); // this is where I'm closing the connection } } 

В третьей последней строке вы заметите, что я закрываю соединение в цикле while. Проблема в том, что если я удалю эту строку, я получу ошибку. Fatal error: Call to a member function bind_param() on a non-object в этой строке.

Я предполагаю, что закрытие соединения, а затем повторное открытие его снова для следующего элемента в цикле не очень хорошо. Итак, как я могу это исправить? Почему я получаю эту ошибку при удалении закрытой линии соединения?

Пожалуйста помоги.

Это пример, который я привел в один из моих репозиториев Github, который решает эту проблему:

 $Query = $Database->prepare("FIRST QUERY"); $Query->execute(); $Query->bind_result($ID,$Password); $Query->store_result(); while ($Query->fetch()){ $Secondary_Query = $Database->prepare("SECOND QUERY"); $Secondary_Query->bind_param(); $Secondary_Query->execute(); $Secondary_Query->close(); } $Query->close(); 

Измените это в соответствии с вашим рабочим сценарием, и у вас будет успешный текущий запрос

Вы можете попробовать что-то вроде ниже:

 /* Get the 10 latest posts from users you're following */ $stmt = $cxn->prepare('SELECT * FROM posts WHERE user_id IN (SELECT following_id FROM follows WHERE user_id = ?) ORDER BY datetime DESC LIMIT 15'); $stmt->bind_param('i', $user_id); $stmt->execute(); $result = $stmt->get_result(); /* If a result exists, continue. */ if ($result->num_rows) { while ($row = $result->fetch_assoc()) { /* Get the user's username from their id */ $stmt = $cxn->prepare('SELECT username FROM users WHERE user_id = ?'); $userid = (int)$row['user_id']; $stmt->bind_param('i', $userid); // Forcing $row['user_id'] to int $stmt->execute(); $stmt->bind_result($username); $stmt->fetch(); //$stmt->close(); Don't close it here } } $stmt->close(); 

Другой подход, но требует гораздо больше времени:

  /* Get the 10 latest posts from users you're following */ $stmt = $cxn->prepare('SELECT * FROM posts WHERE user_id IN (SELECT following_id FROM follows WHERE user_id = ?) ORDER BY datetime DESC LIMIT 15'); $stmt->bind_param('i', $user_id); $stmt->execute(); $result = $stmt->get_result(); /* If a result exists, continue. */ if ($result->num_rows) { while ($row = $result->fetch_assoc()) { /* Get the user's username from their id */ $stmt_loop = $cxn->prepare('SELECT username FROM users WHERE user_id = ?'); $userid = (int)$row['user_id']; $stmt_loop->bind_param('i', $userid); // Forcing $row['user_id'] to int $stmt_loop->execute(); $stmt_loop->bind_result($username); $stmt_loop->fetch(); $stmt_loop->close(); //Close the local stmt here } } $stmt->close();