【问题标题】:FetchAll(PDO::FETCH_ASSOC) nothing is being returned [duplicate]FetchAll(PDO::FETCH_ASSOC) 没有返回任何内容[重复]
【发布时间】:2017-05-24 06:26:34
【问题描述】:

我用这个函数来调用我的数据库

function get_prescriptionWith_4($ID){
    $sql = "SELECT prescriptions FROM tblprescriptions WHERE `ID`='$ID'";
    $query = $this->dbh->prepare($sql);
    $query->execute();
    $row = $query->fetchAll(PDO::FETCH_ASSOC));
    return @$row;
}

我的数据库表是这样的..

ID   |       prescription
1    |    Med  (gen) 20 -- #20/1X per day --morning--for  30 days/,
1    |    test (test) 23 -- #343/1X per day --morning and noon-- 120 days23/,   
          samp (rere) 44 -- #34/1X per day --morning-- 7 days44/, 
1    |    asd (asd) 22 -- #222/3X per day --morning noon and evening--30 days/,   
          qw (wq) 44 -- #222/3X per day --morning noon and evening--60 days/, 
          1233 (123) 21 -- #123213/1X per day --morning---  60 days/,

我想要实现的是加载具有相同 ID 的所有处方,并且由于行处方里面有多个数据,我使用 explode 将数据与 分开,当我尝试使用 Fetch(PDO::FETCH_ASSOC) 时,我只返回第一个处方我认为使用 fetchAll 可能会更好地从我的数据库中获取所有数据..

$pres_array3=$patient->get_prescriptionWith_4($ID);
$new_array3=explode(',',$pres_array3,-1);

但是当我使用echo $new_array3 来检查是否在fetchAll 上时没有返回任何内容

【问题讨论】:

  • Errrm 对不起,这根本不是一个准备好的声明。不过调试很简单,您可以运行一些错误检查函数来查看是否返回任何 pdo 错误,而不是返回数据。
  • @HankyPanky 准备好的语句是有效的,OP 只容易受到 SQL 注入的攻击。请改用参数化语句。
  • 这实际上是 fetch(PDO::FETCH_ASSOC) 开始,但我的问题是如果我使用 fetchAll 没有返回任何内容,这就是我发布该内容的原因,因为我认为这是我的问题..
  • print_r($this->dbh->errorInfo());

标签: php mysql pdo


【解决方案1】:

1) 你准备好的陈述是错误的/被滥用的

$sql = "SELECT prescriptions FROM tblprescriptions WHERE `ID` = :id";
$query = $this->dbh->prepare($sql);
$query->execute([':id' => $ID]);

2) $query->fetchAll(PDO::FETCH_ASSOC) 返回数组,所以$row['prescriptions'] 不存在,它会抛出未定义索引prescriptions 的警告。正确的版本是

if($row = $query->fetch(PDO::FETCH_ASSOC)){

【讨论】:

  • $sql = "SELECT prescriptions FROM tblprescriptions WHERE ID` = :id"; $query = $this->dbh->prepare($sql); $query->execute([':id' => $ID] ); $row = $query->fetchAll(PDO::FETCH_ASSOC)); return @$row;` 返回所有行数据是否正确??
  • 请不要介意编辑。 +1
  • 我真正想要的是获取具有相同 id 的所有数据。这就是我使用 fetchAll 的原因,正如你所说,我所做的方法不正确..
  • 我更新了我的功能,让您更好地了解我想要实现的目标..
  • @LionSmith 为什么连你的id 都不是唯一的? ID 必须自动递增或至少是唯一的,以加快数据库工作并启用索引
【解决方案2】:

所以因为fetchAll(PDO:ASSOC) 什么也没给我...我改用这种方法..

$prescriptions = array();
    while($row = $query->fetch(PDO::FETCH_ASSOC)){
        $prescriptions[] = $row;
    }
return $prescriptions;

然后 $pres_array3=$patient->get_prescriptionWith_4($patientID);

<?php 
    foreach ($pres_array3 as $key => $value) {
       $prescription =  $value['prescriptions'];
       $new_array3=explode(',',$prescription,-1);
        foreach($new_array3 as $value) {    

?>
<input type="text" value="<?php echo $value?>"  />

<?php } } ?>

我使用多重循环的原因是因为在第一个循环中我获取了所有数组数据,然后将其分解以分离数据,然后再次循环,因为分解返回 array 而不是元素..

【讨论】:

  • 仅供参考,这种理解是不正确的fetchAll(PDO:ASSOC) 什么也没给我。如果 fetch() 在数据集上给你一些东西,那么 100% 保证 fetchAll() 也会给 something
  • 你没有得到任何结果的一个原因是这个语句有一个语法错误$row = $query-&gt;fetchAll(PDO::FETCH_ASSOC));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2014-05-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2020-05-04
相关资源
最近更新 更多