嗨,我想在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
答案 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