为什么我的SQL语句仅返回一条记录?

时间:2019-04-17 12:20:08

标签: php mysql pdo

我正在使用PHP PDO向数据库进行查询,在该数据库中,我正在寻找表中多个前键与上一个PDO对象输出的数组相匹配的所有用户。

$in = "";
foreach ($parent_ids as $i => $item)
{
    $key = ":".$i;
    $in .= "$key,";
    $in_params[$key] = $item; // collecting values into key-value array
}
$in = rtrim($in,",");

$sqlRequestParentInfo = "SELECT * FROM academy_user WHERE user_id IN ($in)";
$stmt = $dbConn->prepare($sqlRequestParentInfo);
var_dump($stmt);
$stmt->execute($in_params);
$parent_info = $stmt->fetchObject();

/*echo print_r($ids);
echo json_encode($parent_ids);*/
echo "<pre>";
echo "<br> PARENT INFO <br>";
var_dump($parent_info);
$parent_info = json_encode($parent_info);
echo $parent_info;
echo "</pre>";

数组parent_ids是采用以下格式设置的键的数组:parent3_id_fk,parent4_id_fk等。

每个键的值是一个3位数字,代表分配给表中“学生”的“父母”的外键。

使用这些外键,我正在查询academy_user来查找有关这些父项的信息。因此,我使用了WHERE user_id IN (values) SQL语句。除非我在表中也有一个用户“ 427”外键,但我只返回了一条用户“ 426”的记录,所以运行似乎很好。

这是parent_info的var_dump:

object(stdClass)#2 (11) {
  ["user_id"]=>
  string(3) "426"
  ["user_email"]=>
  string(11) "a@gmail.com"
  ["password"]=>
  string(60) "$2y$10$V4sPIs3fdJ7F49cNtl8eyufuLGu9leTUH4Fl5VUUAcgq4zB/NzUn6"
  ["f_name"]=>
  string(1) "a"
  ["l_name"]=>
  string(1) "a"
  ["address_id_fk"]=>
  NULL
  ["access_lvl"]=>
  string(1) "3"
  ["date_created"]=>
  string(19) "2019-03-28 13:42:15"
  ["date_gdpr_remove"]=>
  NULL
  ["approved"]=>
  string(1) "1"
  ["requested_access_fk"]=>
  string(1) "3"
}

这只是示例数据。有什么想法吗?

编辑: 这是在注入参数然后执行之前SQL语句的样子:

SELECT * FROM academy_user WHERE user_id IN (:parent1_id_fk,:parent2_id_fk,:parent3_id_fk,:parent4_id_fk,:parent5_id_fk,:parent6_id_fk,:parent7_id_fk,:parent8_id_fk,:parent9_id_fk)

1 个答案:

答案 0 :(得分:4)

由于只调用一次$stmt->fetchObject(),所以只返回一个数据。您需要循环调用它并获取parent_info的数组:

$stmt->execute($in_params);
$parent_info = array();
while ($parent = $stmt->fetchObject()) {
    $parent_info[] = $parent;
}
echo json_encode($parent_info);