PHP的MySQL选择功能返回0,但没有错误

时间:2019-07-12 15:42:51

标签: php mysql arrays pdo inner-join

嗨,我想在php中选择2个数字之间的值,我想检查它们是否都存在于数据库中,并且没有错误,但是当我转储它时,它表示array = 0

我正在尝试使用内部联接在单个查询中获取问题和选项,并在2个数字之间进行选择,我检查它们是否在数据库中,并输入IN我得到第一个数字,然后将其加6,然后生成所有数字它们之间的数字用于IN

public function selectquestion($id){
    $max = $id + 4;//max selected value

    for ($i=$id; $i<=$max; $i++) {
        $arr[] = $i;//generates all numbers between min and max 
    }
    $range = implode(",",$arr);
    $sql = $this->pdo->prepare("SELECT questions.value,questions.file,questions.img,options.option1,options.option2,options.option3,options.option4,options.answer 
                                FROM options 
                                INNER JOIN questions 
                                  ON questions.id = options.q_id 
                                WHERE questions.id >= '$id' 
                                  AND questions.id <= '$max' 
                                  AND questions.id IN ($range)");//selects all of questions and options where condition is true

    $row = $sql->fetchAll(PDO::FETCH_OBJ);
    return$row;
}

var_dump($options = $obj->selectquestion(2));

我希望它显示所有问题和选项,但输出为0

2 个答案:

答案 0 :(得分:1)

您的主要问题是,您永远不会执行查询。您还应该使用准备好的语句,而不是将变量直接注入查询中。

检查该范围内的ID是否大于最小值,小于最大值也没有什么意义。您只需检查BETWEEN即可简化查询并使用适当的准备好的语句。另外,通过使用别名,您可以缩短选择的列。

public function selectquestion($id){
    $max = $id + 4; //max selected value

    $sql = $this->pdo->prepare("SELECT q.value, q.file, q.img, 
                                       o.option1, o.option2, o.option3, o.option4, o.answer 
                                FROM options o
                                INNER JOIN questions q
                                    ON q.id = o.q_id 
                                WHERE q.id BETWEEN ? AND ?");
    $sql->execute([$id, $max]);
    return $sql->fetchAll(PDO::FETCH_OBJ);
}

答案 1 :(得分:0)

您需要在prepare语句之后调用execute。否则它将不会执行您的查询。

        gotoPage("https://www.demo.com/in/");
        Document doc = Jsoup.connect("https://www.demo.com/in/").get();
        System.out.println("Before "+doc.select("#top-menu > div > div.nav-logo > a").first());
        Element e = doc.select("#top-menu > div > div.nav-logo > a").first();
        e.attr("href", "https://demo-custom-page.net/demo/test-jsoup.html");
        System.out.println("After "+doc.select("#top-menu > div > div.nav-logo > a").first());
        Thread.sleep(120000);   // inspect element and if html changed or not