如何在PHP中将SQL输出存储到数组?

k2arahey  于 2023-06-28  发布在  PHP
关注(0)|答案(2)|浏览(140)

下面是函数:

protected function get_answers_with_question_id($id){
    global $wpdb;

    $sql = "SELECT *
            FROM {$wpdb->prefix}aysquiz_answers
            WHERE question_id=" . $id;

    $answer = $wpdb->get_results($sql, 'ARRAY_A');

    return $answer;
}

调用函数:

foreach ($questions_ids as $id) {
        
    $answers2[] = $this->get_answers_with_question_id2($id);
        
    }

实际产量:

[[{"answer":"1000"}],[{"answer":"1000"}],[{"answer":"1000"}]]

我需要经典数组:array(key=>value,key=>value,key =>value,等等)

7kjnsjlb

7kjnsjlb1#

在性能改进方面,可以在查询中使用IN运算符。
对于整个数组,取消implode() this,获取数组中的每个值,并将它们添加到查询中的括号内的逗号分隔列表中。
这应该返回所有的值,你会得到循环通过,并得到他们一个接一个,但没有开销:

protected function get_answers_with_question_ids($questions_ids){
global $wpdb;

$sql = "SELECT *
        FROM {$wpdb->prefix}aysquiz_answers
        WHERE question_id IN (" . implode(',', $questions_ids) . ")";

$answer = $wpdb->get_results($sql, 'ARRAY_A');

return $answer;
}

这个改变,也许也没有创建数组,只是直接在$answers2上分配结果,应该会得到你想要的格式:

$answers2 = $this->get_answers_with_question_ids($questions_ids);

// Should return something like [{"answer":"1000"},{"answer":"1000"},{"answer":"1000"}]?

foreach ($answers2 as $a) {
    echo $a.answer // "1000" x 3
}

考虑一下保护你的SQL查询,它是整数/id,应该没问题,虽然,你真的想删除和转义你在查询中使用的任何值,特别是,如果用户可以用他们的输入调整查询。

nzrxty8p

nzrxty8p2#

谢谢你。
questions_ids的格式为:[“3”,“4”,“5”]
但它返回null:

$answers2 = $this->get_answers_with_question_ids($questions_ids)[0];

如果我编辑为:

$answers2 = $this->get_answers_with_question_ids($questions_ids);
Return: [{"answer":"1005"}]

相关问题