首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MYSQL脚本转换为PDO

将MYSQL脚本转换为PDO
EN

Stack Overflow用户
提问于 2014-11-04 22:15:41
回答 1查看 77关注 0票数 1

我正在尝试将现有的MYSQL脚本转换为PDO。我的MYSQL脚本工作,但我的PDO版本不工作。

脚本的目的是从表调度中选择某些UID,其中相同的UID是由对应的cif_stp_indicator的最低字母选择的。

例如,我试图定位UID号码‘Y 63553’。有两个UID和这个号码。一个cif_stp_indicator为'N‘,另一个cif_stp_indicator为'O’。我希望选择带有STP指示符'N‘的UID。

因此,示例数据.

代码语言:javascript
复制
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脚本实现了这一点

代码语言:javascript
复制
 $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。我从这个论坛得到了帮助,使PDO脚本走到了这一步,现在它只是试图理解为什么脚本的空部分不能工作。不报告Y63553和N

代码语言:javascript
复制
 $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'];
 }

连接代码

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 22:22:01

代码语言:javascript
复制
foreach($movedata as $row2) {
  echo $row2['cif_train_uid'];  
  echo $row2['cif_stp_indicator'];
}

有了PDO,你要么把它当成一个数组.或者在数组中使用fetchAll,然后像对任何其他数组一样循环遍历它。

另一种选择是:

代码语言:javascript
复制
$array = $movedata->fetchAll();
for($i=0;$i<sizeof($array);$i++) {
  echo $array[$i]['cif_train_uid'];  
  echo $array[$i]['cif_stp_indicator'];
}

这是PDO和foreach那种奇怪的事情之一..。它有一种特殊的功能。实用但令人困惑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26746100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档