2017-01-20 1 views
-4

나는 실제로 어떤 일이 일어나는지 전혀 모른다. 이야기 : 데이터베이스의 SELECT 문에 PDO를 사용합니다.PHP : 할당 후 잘못된 값

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

그래서 괜찮습니다. 또한 괜찮아

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" 
    } 
    ... 

: 나는 위해서 var_dump$res 변수 뭔가 같은를 얻을 때. 그러나 결과를 다른 방법으로 분류해야합니다. 그래서 내가하고있어 :

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()을 수행하면 올바른 값을 얻을 수 있지만 문제는 모든 값이 double이 아니라 정수 또는 문자열이라는 것입니다. 나 또한 (문자열)을 사용하여 유형 변환하려고 시도했지만 결과는 동일합니다. 나는 아무런 설명이 없다.

업데이트 :

그것은 매우 큰 프로젝트의 난 그냥 가능한을 최소화하고 가능한 한 내 문제가 명확하게하려고 노력했다. 하지만 지금은 새로운 것을 알아 낸 : 을 나는 루프 동안 normTable에서 내 첫 번째 변수 ') 에코 ('는 수행

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 ''에 ''50 .1에서 변화하고있다. 여전히 이유를 알 수 없습니다. PHP에서 배열의 크기 제한이 있습니까?

업데이트 2 및 큰 죄송합니다!

내가 말했듯이 큰 프로젝트입니다. 그래서 내가 읽은 테이블에는 몇 가지 특성에 대한 값이 두 번 이상 있습니다. 사실 그런 경우는 일어나지 않아야합니다. 그래서 대답은 간단합니다. 50 명이 할당 되었기 때문에 50이되었습니다. 시간을 허리 잘 물어 줘서 유감입니다. 그러나 나는이 사례를 완전히 제외시켰다. 그리고 C로 코딩하고 있기 때문에 나의 첫 번째 생각은 다음과 같다. 메모리 누출 - 명백한 경우!

도움 주셔서 감사합니다.

+3

하지만 무엇을하려고합니까? – user2182349

+0

필자는 데이터베이스에서 배열을 읽어 내 코드에서 사용하기 위해 다른 배열로 정렬합니다. 범주 (p.p. 1176)가 있으며 각 범주는 특정 성능에 따라 1-3 포인트를 얻을 수 있습니다 ... – user3240316

+2

최소 예를 들면? 문제를 재현하려면 데이터베이스가 필요합니까? –

답변

0

Meh, 나는 50 평판이 없다. 대답 만 말할 수는 없다.

루프를 사용하여 a를 바꿀 경우 예상 결과 (데이터 샘플 제공)를 얻어야합니다. 예 :

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

그러나이 문제가 실제로 해결되지는 않습니다. YMMV.

+0

감사합니다.하지만이 예를 축소하면 오류가납니다. 당신 말이 맞지만 문제를 해결하지 못합니다. – user3240316