微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在带有数组的 IN 语句之后的 WHERE 语句中使用更多占位符

如何解决在带有数组的 IN 语句之后的 WHERE 语句中使用更多占位符

我需要向以下查询添加更多占位符。这可能吗?我不知道从哪里开始,我在互联网上找不到任何选项。

现在的查询

$in2  = str_repeat('?,',count($arrayid) - 1) . '?';
$sql2 = "SELECT COUNT(id) AS totalacc FROM account WHERE id IN ($in2) ";
$stmt2  = $MysqLi->prepare($sql2);
$types2 = str_repeat('i',count($arrayid));
$stmt2->bind_param($types2,...$arrayid);
$stmt2->execute();
$stmt2->bind_result($row['totalacc']);
    while($stmt2->fetch()) $totalacc = $row['totalacc']; 

我的目标查询

$countname1 = '(Hallo)';
    $countname = trim(filter_var("%{$countname1}%",FILTER_SANITIZE_STRING));
$in2  = str_repeat('?,count($arrayid) - 1) . '?';
$sql2 = "SELECT COUNT(id) AS totalacc FROM account WHERE id IN ($in2) AND name LIKE ?";
$stmt2  = $MysqLi->prepare($sql2);
$types2 = str_repeat('i',s,...$arrayid,$countname); // Will never work,but how to do this? 
$stmt2->execute();
$stmt2->bind_result($row['totalacc']);
    while($stmt2->fetch()) $totalacc = $row['totalacc']; 

解决方法

您只需要将额外的值附加到您的参数数组和类型字符串中。这应该有效(未经测试):

ArrayList<Birthday>
,

最简单的解决方案是使用 PDO 而不是 mysqli。这会容易得多。

如果您坚持使用 mysqli,那么您可以通过简单地忽略类型并将结果附加到数组来实现类似的目的。

$countname1 = '(Hallo)';
$countname = "%{$countname1}%";
$in2 = str_repeat('?,',count($arrayid) - 1) . '?';
$sql2 = "SELECT COUNT(id) AS totalacc FROM account WHERE id IN ($in2) AND name LIKE ?";
$stmt2 = $mysqli->prepare($sql2);

$arrayid[] = $countname;
$stmt2->bind_param(str_repeat('s',count($arrayid)),...$arrayid);
$stmt2->execute();
$stmt2->bind_result($totalacc);
$stmt2->fetch();

您甚至可以编写一个函数来从所有这些代码中抽象出来。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。