2014-11-04 89 views
1

我想將現有的MYSQL腳本轉換爲PDO。我的MYSQL腳本可以工作,但我的PDO版本沒有。將MYSQL腳本轉換爲PDO

該腳本的目的是從TABLE調度表中選擇某些UID,其中相同的UID是由其對應的cif_stp_indicator的最低字母順序選擇的。

因此,例如我試圖找到UID號碼'Y63553'。這個號碼有兩個UID。一個具有'N'的cif_stp_indicator和一個具有'O'的cif_stp_indicator。我想選擇的UID與「N」

所以例如數據的STP指示符............

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

我想選擇Y63553用的cif_stp_indicator '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腳本運行,但它沒有給出結果。我相信它會處理NULL部分的配置,因爲我可以通過刪除腳本的相關部分來獲得腳本來顯示Y63553的cif_train_uid。我已經從這個論壇獲得了幫助,通過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(); 
} 

回答

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

隨着PDO就應該把的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

謝謝多米尼克。仍然沒有得到任何結果,即使有這種變化 – user2635961 2014-11-04 22:26:09

+0

我會仔細看.. ..堅持下去。 – Dominique 2014-11-04 22:26:58

+0

會嘗試替代 – user2635961 2014-11-04 22:27:02