php - 如何在 Mysqli 中将 UNION 中的结果与 IN 子句绑定?
问题描述
我正在尝试使用 IN 子句编写 UNION 准备语句的查询。我正在使用 call_user_func_array() 绑定数组,但没有显示结果。我认为绑定数组没有问题。
这是我的代码
PHP代码:
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);
至
$stmt1->bind_result($id,$year,$name,$city);
它对我有用。
推荐阅读
- google-apps-script - 从不同的单元格获取值并通过 googlesheet 脚本设置
- audio - 为什么管道线没有出现?
- config - laravel config/custom.php 更改未更新
- c - 我编译了一个几乎为空的 .c 文件。它的 .text 部分有什么?
- django - 在 Django Rest Framework 中限制用户的多次登录
- azure-pipelines - 如何在 Azure DevOps 管道中使用手动验证任务?
- excel - Excel:如何仅在最大值大于最小值的某个值时突出显示每行的最大值?
- javascript - 导航栏(折叠)按钮不起作用 Bootstrap 5.1.3
- python - 创建新列并根据其他列值填充它们
- ios - 在 IOS 设备上测试 localhost:8080