PHP:赋值后的值不正确

时间:2017-01-20 23:32:47

标签: php pdo weak-typing

我真的不知道发生了什么。故事: 我在数据库上使用PDO作为SELECT语句。

API specs

这样很好,而且很有效。当我 var_dump $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); 变量时,我会得到类似的结果:

$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" } 我会得到正确的值,但问题是并非每个值都是double,而是整数或字符串。我也尝试用(字符串)进行类型转换,但结果相同。我没有解释。

更新

这是一个非常大的项目,我只是尽量减少它,尽可能地让我的问题变得清晰。但现在我发现了一些新的东西: 我在循环期间在normTable中做了第一个变量的'echo()':

doubleval()

,值从'50 .1'变为'50'。仍然无法弄清楚原因。 PHP中是否存在数组的大小限制?

更新2和一个很大的抱歉!

正如我所说,这是一个很大的项目。因此,我读出的表格中,某些属性的值有两次或更多。实际上这种情况不应该发生。这就是为什么答案很简单:它变成了50,因为分配了50。我很抱歉让你的时间缩短了。但我完全排除了这种情况,因为我也用C编码,我的第一个想法是:内存泄漏 - 明显的情况!

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

嗯,我没有50个声誉;不能只评论答案。

如果在循环中替换a,则应获得预期结果(给定数据样本)。即:

foreach($res as $e){
  $this->normTable[$e['b']][$e['points']]=$e['performance'];
  $this->normTable[$e['b']]['compare']=$e['compare'];
}

但我不确定这真的能解决你的问题。 YMMV。