PDO fetchAll Results仅返回一个记录问题

时间:2015-04-01 11:56:13

标签: php mysql pdo inner-join fetchall

我在我的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

php + pdo:

$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 ||

1 个答案:

答案 0 :(得分:0)

感谢@rmertins的线索,我解决了这个问题。

表" historia"是用INNODB引擎和表" pub_us"与MyISAM有关,因此引擎之间的差异只会产生一行。

解决了这个改变引擎的问题(在这种情况下为INNODB)

感谢您的评论和线索,我希望这有助于其他人!