之前我在百度知道发布问题,一直都没有人来帮我,所以就自己想了一个折中的办法,
让程序强制执行为nginx下的结果。
解决办法是:
修改lib/Cake/Model/Datasource/Database/Mysql.php,
219行,
public function resultSet($results) { $this->map = array(); $numFields = $results->columnCount(); $index = 0; while ($numFields-- > 0) { $column = $results->getColumnMeta($index); if (empty($column['native_type'])) { $type = ($column['len'] == 1) ? 'boolean' : 'string'; } else { $type = $column['native_type']; } if (!empty($column['table']) && strpos($column['name'], $this->virtualFieldSeparator) === false && 1==2 ) { $this->map[$index++] = array($column['table'], $column['name'], $type); } else { $this->map[$index++] = array(0, $column['name'], $type); } } }
强制让if判断执行
$this->map[$index++] = array(0, $column['name'], $type);
因为在nginx下,$column['table']这个是空
这样,所有的结果都成了
Array( [0]=>Array([0]=>Array([id]=>123,[title]=>'this is title')), [1]=>Array([0]=>Array([id]=>124,[title]=>'this is title2')) )需要注意的是,如果用关联查询,id字段一定不要重复,不然前面的id会被后面的id覆盖,结果当如就不正确了。
下面是问题:
windows下是apache,测试返回结果集格式为 : Array( [0]=>Array([product]=>Array([id]=>123,[title]=>'this is title')), [1]=>Array([product]=>Array([id]=>124,[title]=>'this is title2')) ) 但是linux下的nginx返回结果集就变成了 Array( [0]=>Array([0]=>Array([id]=>123,[title]=>'this is title')), [1]=>Array([0]=>Array([id]=>124,[title]=>'this is title2')) ) 数据库:MySQL 底层查询数据库:PDO, php版本:windows下的是:5.2.11,linux下的是:5.2.10 MySQL版本:windows下是:5.1.36 ,linux下是:5.1.38 这个到底是cakephp配置问题,还是其他配置出问题了呀, 在线等。。。。
问题补充:
如果假如级联查询的话,apache会返回 Array( [0]=>Array( [product]=>Array([id]=>123,[title]=>'this is title'), [user]=>array([u_id]=>2,[name]=>'tom') ), [1]=>Array( [product]=>Array([id]=>124,[title]=>'this is title2'), [user]=>array([u_id]=>3,[name]=>'jeck') ) ) 但是nginx下,则返回 Array( [0]=>Array( [0]=>Array([id]=>123,[title]=>'this is title',[u_id]=>2,[name]=>'tom') ), [1]=>Array( [0]=>Array([id]=>124,[title]=>'this is title2',[u_id]=>3,[name]=>'jeck') ) ) 结果集被合并了....