MySQL Возвращает различное количество строк на localhost vs live server для одного и того же кода

У меня есть простая форма, которая нуждается в списке остановок в текстовом поле и возвращает идентификатор для каждого с правой стороны. Это мой скриншот на localhost … У меня одинаковые имена таблиц, имена столбцов, количество записей на локальном и живом сервере. Моя страница на localhost Вот скриншот одной и той же страницы с тем же запросом на реальном сервере … Моя страница на живом сервере

Вот код, который я использую на обеих страницах

$conn = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass); if(isset($_POST["busnumber"], $_POST["busroute"])){ $stops = explode(PHP_EOL, $_POST["busroute"]); $sql = 'SELECT * FROM stops WHERE stop_name LIKE :stop'; $statement = $conn->prepare($sql); $statement->setFetchMode(PDO::FETCH_ASSOC); foreach($stops as $stop){ $statement->bindValue(':stop', $stop); $statement->execute(); $results = $statement->fetchAll(); foreach($results as $result){ echo $result['stop_id'].' '.$result['stop_name']."</br>"; } } } 

Как вы можете видеть, он возвращает идентификатор последней строки только на реальном сервере. Может кто-нибудь, пожалуйста, скажите мне, как это возможно, и что мне не хватает?

ИЗМЕНИТЬ 1

Обратите внимание, что происходит, когда я меняю данные, введенные в текстовую область. Localhost показывает обе идентификаторы сейчас Локальный хост после изменения строк

Угадайте, что показывает сервер после реверса? Только LAST ROW! Какой сервер показывает после изменения строк

Вам не нужно setFetchMode (). В то время, когда я использовал PDO, у меня всегда были лучшие результаты, просто используя bindParam () и fetch () с самой настройкой по умолчанию PDO, что означает просто установить для errfode исключение и charset для utf8 следующим образом:

  try { $con = new PDO("mysql:host=".$host.";dbname=".$db_name, $user, $password); } catch(PDOException $e){ die("ERROR ". $e->getMessage()); } $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $con->exec("SET NAMES utf8"); 

Получение любых результатов, подобных этому

 while($r = $statement->fetch()) { echo $r['id']; } 

В любое время, когда кто-то использовал другую настройку, я заметил, что они столкнулись с проблемами.

Попробуйте это, возможно.

Это очень просто. Пожалуйста, проверьте свой живой db через phpmyadmin, если у вас есть доступ, и из phpmyadmin запустите ваши запросы, как будто вы запускаете его из php-кода. Возможно, у вас есть некоторые ограничения mysql или php на live. А также проверьте свои версии db на localhost и живите также с версиями php. Дайте мне знать результаты запросов phpmyadmin!

Просто угадай проблему. Я действительно не думаю, правильно ли этот ответ. Поэтому, пожалуйста, простите меня заранее.

PDOStatement::fetchAll() возвращает массив, состоящий из всех строк, возвращаемых запросом. Из этого можно сделать два вывода:

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

Источник: учебник PDO

Я испустил ошибку. Я ответил на это подробно на другой должности, и я связываюсь с этим сообщением от ЗДЕСЬ. Спасибо всем за ваше время и ответы.