2017-12-01 1 views
0

그냥 파일을 구문 분석하고 쿼리를 작성하지만 $row하나를 결과로 반환합니다. 여기서 보류는 내가 작성한 쿼리 당 결과를 얻습니다.PHP : 간단한 PDO 루프가 작동하지 않습니까?

while (!feof($f)) { 

    $contents = ''; 
    $contents = fgets($f); 
    $p = explode(" ", $contents); 

    $req = "SELECT id_product from ps_product WHERE `reference`='".$p[1]."'"; 


    $rs = $dbh->prepare($req); 
    $rs->execute(); 

    $row = $rs->fetch(); 

    print_r($row); 
} 
난 단지 마지막에 하나 개의 결과를 얻고있다

내 디버깅이 같다 :

M0852 

PDOStatement Object ([queryString] => SELECT id_product from ps_product WHERE `reference`='M0852 ') 

M0850 

PDOStatement Object ([queryString] => SELECT id_product from ps_product WHERE `reference`='M0850 ') 

M0850 

PDOStatement Object ([queryString] => SELECT id_product from ps_product WHERE `reference`='M0850 ') 

M0851 

PDOStatement Object ([queryString] => SELECT id_product from ps_product WHERE `reference`='M0851 ') 

M0851 

PDOStatement Object ([queryString] => SELECT id_product from ps_product WHERE `reference`='M0851 ') 

M0855 

PDOStatement Object ([queryString] => SELECT id_product from ps_product WHERE `reference`='M0855 ') 

M0849 

PDOStatement Object ([queryString] => SELECT id_product from ps_product WHERE `reference`='M0849 ') 

배열 ([id_product] => 2662> 2662 [0])

쿼리 당 결과가 하나 인 배열을 얻으 려 할 때.

+0

이 그것을 할 잘못된 방법을 밖으로 제거합니다. 문자열 연결을 사용하면 준비된 명령문의 유용성을 완전히 무시할 수 있습니다. – GrumpyCrouton

+0

@ GrumpyCrouton 내가 이해하지만 "conventional"bindings와 동일한 결과를 만들었습니다. – direxit

+0

@ chris85 각 페치는 하나의 행과 그 점을 반환하지 않습니다. – direxit

답변

2

파일의 마지막 줄만 끝에 LF 문자가 없습니다.
사용 트림()

$req = "SELECT id_product from ps_product WHERE `reference`=?"; 
$rs = $dbh->prepare($req); 
while (!feof($f)) { 

    $contents = trim(fgets($f)); 
    $p = explode(" ", $contents); 

    $rs->execute([$p[1]]); 
    $row = $rs->fetch(); 

    print_r($row); 
} 
+0

당신은 저의 하루를 저장했습니다! – direxit