2014-11-04 3 views
1

기존 MYSQL 스크립트를 PDO로 변환하려고합니다. MYSQL 스크립트는 작동하지만 PDO 버전은 작동하지 않습니다.MYSQL 스크립트를 PDO로 변환

스크립트의 목표는 테이블 일정에서 특정 UID의 동일한 UID가 해당 cif_stp_indicator의 가장 낮은 알파벳 문자로 선택되는 곳을 선택하는 것입니다.

예를 들어 UID 번호 'Y63553'을 찾으려고합니다. 이 번호에는 두 개의 UID가 있습니다. 하나는 cif_stp_indicator가 'N'이고 하나가 cif_stp_indicator가 'O'인 경우입니다. 난의 cif_stp_indicator로 Y63553을 선택하고자하는 ............ 'N'

그래서 예를 들어 데이터의 STP 표시기

cif_train_uid    cif_stp_indicator   Other Data 
    Y63553       N       x 
    Z45789       O       x 
    T78456       O       x 
    Y63553       O       x 

을 UID를 선택하려면 'N'

MySQL의 아래 스크립트는 달성이

$cif_stp_indicator=null; 
$cif_train_uid='Y63553'; 


$b="SELECT s1.cif_train_uid,s1.cif_stp_indicator,s1.schedule_start_date 
FROM schedule s1 
LEFT JOIN schedule s2 
ON (s1.cif_train_uid=s2.cif_train_uid AND s1.cif_stp_indicator>s2.cif_stp_indicator) 
WHERE s2.cif_stp_indicator is NULL AND s1.cif_train_uid='$cif_train_uid' "; 

$l=mysqli_query($mysql_link,$b); 

if ($l) { 

    while($berths=mysqli_fetch_array($l,MYSQLI_ASSOC)) 
    { 

    echo $berths['cif_train_uid'];  
    echo $berths['cif_stp_indicator']; 

    } 
}   

PDO 스크립트 실행 아래하지만 더 결과를 제공하지 않습니다. 그 스크립트의 관련 부분을 제거하여 Y63553의 cif_train_uid를 모두 표시하는 스크립트를 얻을 수 있으므로 NULL 부분이 구성된 방식과 관련 있다고 확신합니다. 이 포럼에서 PDO 스크립트를 사용하여 도움을 얻었으며 지금은 스크립트의 NULL 부분이 작동하지 않는 이유를 이해하려고합니다. 즉 연결 다시 Y63553 및 N

$cif_stp_indicator=null; 
$cif_train_uid='Y63553'; 

$sql="SELECT s1.cif_train_uid,s1.cif_stp_indicator,s1.schedule_start_date 
FROM schedule s1 
LEFT JOIN schedule s2 
ON (s1.cif_train_uid=s2.cif_train_uid AND s1.cif_stp_indicator>s2.cif_stp_indicator) 
WHERE s2.cif_stp_indicator is NULL AND s1.cif_train_uid=:s1_cif_train_uid "; 

$movedata=$mysql_link->prepare($sql); 

$movedata->bindValue(':s1_cif_train_uid',$cif_train_uid, PDO::PARAM_STR); 
$movedata->execute(); 

$array=$movedata->fetchAll(); 
for($i=0;$i<sizeof($array);$i++){ 
echo $array[$i]['cif_train_uid']; 
echo $array[$i]['cif_stp_indicator']; 
} 

코드를보고하지

try 
{ 
$mysql_link= new PDO("mysql:host=$servername;dbname=db;charset=utf8",$username,$password); 
$mysql_link->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 
$mysql_link->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
echo "Connected Success"; 
} 
catch(PDOException $e) 
{ 
echo $e->getMessage(); 
} 
PDO와

답변

1
foreach($movedata as $row2) { 
    echo $row2['cif_train_uid']; 
    echo $row2['cif_stp_indicator']; 
} 

당신이해야 하나의 foreach는 배열 인 것처럼 ... 또는 fetchAll 배열에서 다음 루프를 다른 배열과 마찬가지로 사용합니다.

대안의 존재 :

$array = $movedata->fetchAll(); 
for($i=0;$i<sizeof($array);$i++) { 
    echo $array[$i]['cif_train_uid']; 
    echo $array[$i]['cif_stp_indicator']; 
} 

그것은 PDO와의 foreach와 그 이상한 것들 중 하나는 ... 그것은 실제하지만 혼란 특별한 기능을 ...있다.

+0

감사합니다. Dominique. 그 변화에도 여전히 결과가 나오지 않아요. – user2635961

+0

자세히 보겠습니다. – Dominique

+0

대안을 시도합니다 – user2635961