我正在使用 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 位数字,表示表中分配给“学生”的“ parent ”的外键。
我正在使用这些外键查询 academy_user
以查找有关这些 parent 的信息。所以我使用 WHERE user_id IN (values)
SQL 语句。它似乎运行良好,除了我只为用户“426”返回一条记录,即使此表中也有一个用户“427”外键。
这是 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"
}
这只是示例数据。有什么想法吗?
编辑: 这是注入(inject)参数然后执行之前的 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)
最佳答案
您只会返回一条数据,因为您只调用了 $stmt->fetchObject()
一次。您需要在循环中调用它并获取 parent_info
数组:
$stmt->execute($in_params);
$parent_info = array();
while ($parent = $stmt->fetchObject()) {
$parent_info[] = $parent;
}
echo json_encode($parent_info);
关于php - 为什么我的SQL语句只返回一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55727420/