我在我的localhost中开发了以下脚本(使用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实例,它在本地运行良好,但在生产服务器中,生成的获取行始终是相同的。
还尝试更改我的INNER JOIN表顺序,同样的结果。 有线索吗?也许错误的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 ||
答案 0 :(得分:0)
感谢@rmertins的线索,我解决了这个问题。
表" historia"是用INNODB引擎和表" pub_us"与MyISAM有关,因此引擎之间的差异只会产生一行。
解决了这个改变引擎的问题(在这种情况下为INNODB)
感谢您的评论和线索,我希望这有助于其他人!