2012-09-25 22:35:14  浏览:1604

cakephp

之前我在百度知道发布问题,一直都没有人来帮我,所以就自己想了一个折中的办法,

让程序强制执行为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')
	)
)
结果集被合并了....

返回首页