php mysql select函数返回0但无错误
嗨,我想在php中选择2个数字之间的值,我想检查它们是否都存在于数据库中,并且没有错误,但当我转储时,它表示array=0 我尝试使用内部联接在单个查询中获取问题和选项,并在2个数字之间选择它们,我检查它们是否在db中,我获取第一个数字,然后向其中添加6个,然后生成它们之间的所有数字以用于inphp mysql select函数返回0但无错误,php,mysql,arrays,pdo,inner-join,Php,Mysql,Arrays,Pdo,Inner Join,嗨,我想在php中选择2个数字之间的值,我想检查它们是否都存在于数据库中,并且没有错误,但当我转储时,它表示array=0 我尝试使用内部联接在单个查询中获取问题和选项,并在2个数字之间选择它们,我检查它们是否在db中,我获取第一个数字,然后向其中添加6个,然后生成它们之间的所有数字以用于in public function selectquestion($id){ $max = $id + 4;//max selected value for ($i=$id; $i<=
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));
公共功能选择问题($id){
$max=$id+4;//最大选定值
对于($i=$id;$ipdo->prepare(“选择questions.value,questions.file,questions.img,options.option1,options.option2,options.option3,options.option4,options.answer
从选项
内部连接问题
关于问题.id=options.q\u id
其中questions.id>=“$id”
和questions.id您需要在prepare语句之后调用execute。否则它将不会执行您的查询
public function selectquestion($id){
$max = $id + 4;//max selected value
$params = array();
$arr = array();
$count = 1;
for($i=$id; $i<=$max; $i++) {
$arr[$count] = $i;//generates all numbers between min and max
$params[$count] = ':p_'.$count;
$count++;
}
$range_param = implode(",",$params);
$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_param)");//selects all of questions and options where condition is true
$sql->bindParam(':id', $id, PDO::PARAM_INT);
$sql->bindParam(':max', $max, PDO::PARAM_INT);
foreach($arr as $key => $a){
$sql->bindParam(':p_'.$key, $arr[$key], PDO::PARAM_INT);
}
$sql->execute();
$row = $sql->fetchAll(PDO::FETCH_OBJ);
return$row;
}
var_dump($options = $obj->selectquestion(2));
公共功能选择问题($id){
$max=$id+4;//最大选定值
$params=array();
$arr=array();
$count=1;
对于($i=$id;$ipdo->prepare(“选择questions.value,questions.file,questions.img,options.option1,options.option2,options.option3,options.options.4,options.answer FROM options内部连接questions.id=options.q_id WHERE questions.id>=:id AND questions.id您的主要问题是您从未执行过查询。您还应该使用准备好的语句将变量直接注入查询的方法
检查ID是否大于最小值、小于最大值以及是否在该范围内也没有什么意义。您可以简化查询,只需检查之间的,
即可使用适当的预处理语句。此外,使用别名可以缩短所选列
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);
}
为什么在(2,3,4,5,6)
中同时使用和id>=2和id这并不是测试是否所有的数字都存在,它只返回存在的数字。这是PDO?如果是这样的话prepare
不会execute
。您还误用了prepared语句,参数化。您没有调用$sql->execute()
您是否尝试直接在数据库中运行该查询?如果是,它将返回您想要的数据?这不是使用正确的预处理语句!您使用了prepare()
,但从未绑定值!大不不不!@Qirel您是对的。现在我更新了我的答案以绑定参数