У меня есть простая форма, которая нуждается в списке остановок в текстовом поле и возвращает идентификатор для каждого с правой стороны. Это мой скриншот на 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()
возвращает массив, состоящий из всех строк, возвращаемых запросом. Из этого можно сделать два вывода:
Источник: учебник PDO
Я испустил ошибку. Я ответил на это подробно на другой должности, и я связываюсь с этим сообщением от ЗДЕСЬ. Спасибо всем за ваше время и ответы.