Я разработал следующий скрипт на моем локальном хосте (используя wamp 2.2, apache 2.2.1 windows, php 5.3.9, mysql 5.5.20). Когда я загружаю скрипт на рабочий сервер (apache 2.2.29, unix, php 5.3.29, mysql 5.5.42)
Я заметил, что скрипт php + pdo не возвращает все извлеченные строки так же, как тот же скрипт, что и на моем локальном сервере.
Если я пытаюсь добавить экземпляр sql «order by», он хорошо работает на локальном сервере, но на производственном сервере полученная строка всегда одинакова.
Также попытался изменить порядок таблицы INNER JOIN, но с тем же результатом.
Есть какие-нибудь подсказки? Может быть, неправильный ВНУТРЕННИЙ РЕЙТИНГ
$user = '';
$pass = '';
$dsn = 'mysql:host=myhost;dbname=mydbname;charset=utf8';
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
function Contents($id) {
global $pdo;
$stmt = $pdo->prepare('SELECT historia.id AS idhistoria, pub_us.comic, pub_us.id FROM historia INNER JOIN pub_us ON pub_us.historia = historia.id WHERE pub_us.comic = :id ORDER BY orden');
$stmt->execute(array(':id' => $id));
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt = null;
return $data;
}
$comicid = "fantasticfour/1/001";
$data = Contents($comicid);
foreach($data as $row) {
echo $row['idhistoria'];
echo " - ";
echo $row['comic'];
echo " - ";
echo $row['id'];
}
Структура таблицы:
Table structure for historia: id(text, primary key)
Table structure for pub_us: id(int,auto increment, primary key), comic(text), historia(text, related to table historia.id)
Полученные данные:
Results in local wamp:
|| idhistoria || comic || id ||
|| fantfour-1-001b || fantasticfour/1/001 || 25356 ||
|| fantfour-1-001 || fantasticfour/1/001 || 16449 ||
|| fantfour-1-001a || fantasticfour/1/001 || 3772 ||
Results in server :
|| idhistoria || comic || id ||
|| fantfour-1-001a || fantasticfour/1/001 || 3772 ||
Благодаря подсказке @rmertins я решил проблему.
Таблица «Historia» была с движком INNODB, а таблица «pub_us» была с MyISAM, поэтому различия между движками приводят только к одной строке.
Решено это смена двигателей на одинаковые (INNODB в данном случае)
Спасибо за комментарии и подсказки, я ожидаю, что это поможет кому-то еще!
Других решений пока нет …