【问题标题】:SQL fetching different values from 2 rows, where rows have same idsSQL 从 2 行中获取不同的值,其中行具有相同的 id
【发布时间】:2016-07-04 09:57:59
【问题描述】:

我正在尝试将下表中的值分配给 2 个单独的变量:

$a_intro = 来自 d 的值,如果 c 为空 & $a_features = 来自 d 的值,如果 c 不为空

但下面的代码给了我 - 未定义的变量 $a_features。

TABLE STRUCTURE IS :

id1    |    id2     |   a     |     b     |       c     |       d
------------------------------------------------------------------------
 11         22          1           2                        text1
 11         22          1           2            3           text2


$query3 = "SELECT * FROM table WHERE (id1=11 AND id2=22)";

if($result3 = $dbo->query($query3)){

        //echo $result3->fetchColumn()."<br/>";

$data3 = $result3->fetch(PDO::FETCH_ASSOC);

if(empty($data3['c'])){

    $a_intro = $data3['d'];

  //} else if(!empty($data3['c'])){

} else {

    $a_features = $data3['d'];
    //echo "Its not EMPTY";

    }

} else {

    echo "ERROR in SQL Query for fetching Values<br/>";
    echo mysqli_error($dbo);

}

任何猜测,有什么问题吗?在此先感谢..

【问题讨论】:

标签: php mysql sql pdo


【解决方案1】:

由于您希望在结果集中获得不止一行,因此您需要循环处理结果

您似乎还混合了 PDO 和 MYSQLI API,这将不起作用,如果您在连接数据库时使用的是 PDO,请坚持使用 PDO

此外,您的 IF 并未涵盖所有可能性,并且在某些情况下会导致变量未定义和未设置。

$query3 = "SELECT * FROM table WHERE (id1=11 AND id2=22)";
$result3 = $dbo->query($query3);
if($result3 === FALSE) {
    echo "ERROR in SQL Query for fetching Values<br/>";
    print_r($dbo->errorInfo();
    exit;
}

// pre define and initialize the variables
$a_intro = [];           
$a_features = [];         


// this loop is implied by your query to get 2 or more results
// However it is nonsence as you are processing 2 rows into 
// scalar variables $a_intro and $a_features
// maybe they shoud be arrays

while ($data3 = $result3->fetch(PDO::FETCH_ASSOC)) {

    if(empty($data3['c'])){
        $a_intro[] = $data3['d'];
    } else {
        $a_features[] = $data3['d'];
    }

}

由于我不知道您还在用 $a_intro 和 $a_features 做什么,因此很难在这方面更有帮助

【讨论】:

  • 事实上,这些是 2 个不同的列,而不是 ID,并且提供 DYNAMIC DROPDOWNS,因此必须满足两个条件,只有使用 AND 运算符才为 TRUE
  • 谢谢错过
  • 回显 mysqli_error($dbo); id不是必须的,可以忽略。现在,可以猜到,在 SQLi 被完全删除之后出了什么问题
  • 这个声明 PDO::FETCH_ASSOC 暗示你正在使用 PDO,因此 mysqli_ 对象不会在你的连接代码中被实例化 所以你不能仅仅决定使用它。如果你连接了 PDO,那么你必须坚持使用 PDO,如果反过来,你连接了MYSQLI_,那么你就不能使用PDO::FETCH_ASSOC
  • print_r($dbo->errorInfo());谢谢,我错过了while循环。谢谢吨:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2015-09-02
  • 2023-02-07
  • 1970-01-01
相关资源
最近更新 更多