Php 如何在Mysqli中用in子句绑定结果?
我正试图用IN子句为UNION prepare语句编写查询。我正在使用call_user_func_array()绑定数组,但没有显示结果。我认为绑定数组没有问题 这是我的密码 PHP代码:Php 如何在Mysqli中用in子句绑定结果?,php,mysqli,prepared-statement,union,Php,Mysqli,Prepared Statement,Union,我正试图用IN子句为UNION prepare语句编写查询。我正在使用call_user_func_array()绑定数组,但没有显示结果。我认为绑定数组没有问题 这是我的密码 PHP代码: if(isset($_GET['subject'])) //subject is array of subjects { $search1 = $_GET['subject']; echo $subject_count = count($search1); ec
if(isset($_GET['subject'])) //subject is array of subjects
{
$search1 = $_GET['subject'];
echo $subject_count = count($search1);
echo $subject_csph = implode(',', array_fill(0, $subject_count, '?')); // comma-separated placeholders
$total_count = $subject_count * 14;
$total_params = array_merge($search1, $search1, $search1, $search1, $search1,
$search1, $search1);
$param_string = str_repeat('s', $subject_count * 14); // write s chars before i chars
$construct .="(subject in ($subject_csph) or subject in ($subject_csph)
or subject in ($subject_csph) or subject in ($subject_csph) or subject in ($subject_csph)
or subject in (subject_csph) or subject in (subject_csph))";
$stmt = $conn->prepare("(SELECT id,year,name,city FROM student1 WHERE $construct) union all (SELECT id,year,name,city FROM student2 WHERE $construct)");
if($stmt){
array_unshift($total_params, $param_string); // prepend the type values string
$ref = []; // add references
foreach ($total_params as $i => $v) {
$ref[$i] = &$total_params[$i]; // pass by reference as required
}
call_user_func_array([$stmt, 'bind_param'], $ref);
$stmt->execute();
$stmt1->bind_result($id,$year,$name,$city,$id,$year,$name,$city);
$count = 0;
while($stmt1->fetch()){
echo $id;
$count++;
}
echo $foundnum=$count;
}
}
错误日志中没有错误。我在这里怎么了?我变了
$stmt1->bind_result($id,$year,$name,$city,$id,$year,$name,$city);
到
这对我很有用。您知道显示的SQL是冗余的吗?你重复7次条件(包括两次打字,否则会导致查询失败)和两次查询…IN子句中有一个,所以我必须传递7倍的绑定数量来平衡占位符和绑定变量。我在这里做错了一件事,因为2个union select,我必须传递14倍。现在我得到$count.query运行正常,但如何在UNION中绑定结果?请告诉我。我解决了我的问题。我绑定了两次结果,这是错误的。
$stmt1->bind_result($id,$year,$name,$city);