我真的不知道发生了什么。故事:我将 PDO 用于数据库上的 SELECT 语句。
$sql = "SELECT a,b,c,performance,points,compare
FROM normvalues
WHERE x=:x AND y=1 AND z=:z";
$stmt = $GLOBALS['PDO']->prepare($sql);
$stmt->bindParam(":x",$x);
$stmt->bindParam(":z",$z);
$stmt->execute();
$res=$stmt->fetchAll(PDO::FETCH_ASSOC);
所以这很好,它正在工作。当我var_dump$res
变量时,我得到如下信息:
array(6) {
["a"]=> string(2) "44"
["b"]=> string(4) "1176"
["c"]=> string(4) "1166"
["performance"]=> string(4) "50.1"
["points"]=> string(1) "1"
["compare"]=> string(2) "-1"
}
[1]=>
array(6) {
["a"]=> string(2) "57"
["b"]=> string(4) "1176"
["c"]=> string(4) "1166"
["performance"]=> string(4) "47.7"
["points"]=> string(1) "2"
["compare"]=> string(2) "-1"
}
[2]=>
array(6) {
["a"]=> string(2) "70"
["b"]=> string(4) "1176"
["c"]=> string(4) "1166"
["performance"]=> string(4) "44.7"
["points"]=> string(1) "3"
["compare"]=> string(2) "-1"
}
...
那也没关系。但我必须以另一种方式对结果进行排序。所以我在做:
foreach($res as $e){
$this->normTable[$e['a']][$e['points']]=$e['performance'];
$this->normTable[$e['a']]['compare']=$e['compare'];
}
而现在我完全迷失了。通过分配$e['performance']
我得到错误的值。实际上这应该是性能值。
[1176]=>
array(4) {
[1]=> string(2) "50"
["compare"]=> string(2) "-1"
[2]=> string(2) "48"
[3]=> string(2) "45"
}
我已经检查了数据库中的值,它们是正确的。通过这样做,doubleval()
我会得到正确的值,但问题是并非每个值都是双精度值,而且也是整数或字符串。我也尝试使用 (string) 进行类型转换,但结果相同。我没有解释。
更新:
这是一个非常大的项目,我只是尽量减少它,并使我的问题尽可能清晰。但现在我发现了一些新东西:我在循环期间对 normTable 中的第一个变量执行了“echo()”:
foreach($res as $e){
$this->normTable[$e['a']][$e['points']]=$e['performance'];
echo "a:".$e['a']." pt: ".$e['points']." perf: ".$e['performance']."-".$this->normTable[1176][1]."\n";
$this->normTable[$e['a']]['compare']=$e['compare'];
}
并且值从“50.1”变为“50”。还是想不通原因。PHP中的数组有大小限制吗?
更新 2 非常抱歉!
正如我所说,这是一个大项目。所以我读出的表格,有一些属性的一些值两次或更多。其实这种情况不应该发生。这就是答案很简单的原因:它变成了 50,因为分配了 50。我很抱歉耽误了你的时间。但我完全排除了这种情况,因为我也在用 C 编码,所以我的第一个想法是:内存泄漏 - 明确的情况!
谢谢你的帮助。