php - MySQLi 使用 IN 运算符准备语句

标签 php sql mysqli prepared-statement

<分区>

我必须使用 IN 运算符从数据库中选择一些行。我想用准备好的语句来做。这是我的代码:

<?php
$lastnames = array('braun', 'piorkowski', 'mason', 'nash');
$in_statement = '"' . implode('", "', $lastnames) . '"'; //"braun", "piorkowski", "mason", "nash"

$data_res = $_DB->prepare('SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN (?)');
$data_res->bind_param('s', $in_statement);
$data_res->execute();
$result = $data_res->get_result();
while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    ...
}
?>

但是尽管所有数据都存在于数据库中,但什么也没有返回。

还有一个:如果我直接通过$in_statement来查询和执行它,将返回数据.所以问题出现在准备上。

我在谷歌上寻找这个问题,但没有成功。我的代码有什么问题?
感谢您的帮助!

最佳答案

我最近找到了我的问题的解决方案。也许这不是最好的方法,但效果很好!证明我错了:)

<?php
$lastnames = array('braun', 'piorkowski', 'mason', 'nash');
$arParams = array();

foreach($lastnames as $key => $value) //recreate an array with parameters explicitly passing every parameter by reference
    $arParams[] = &$lastnames[$key];

$count_params = count($arParams);

$int = str_repeat('i',$count_params); //add type for each variable (i,d,s,b); you can also determine type of the variable automatically (is_int, is_float, is_string) in loop, but i don't need it
array_unshift($arParams,$int); 

$q = array_fill(0,$count_params,'?'); //form string of question marks for statement
$params = implode(',',$q);

$data_res = $_DB->prepare('SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ('.$params.')');
call_user_func_array(array($data_res, 'bind_param'), $arParams);
$data_res->execute();
$result = $data_res->get_result();
while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    ...
}

$result->free();
$data_res->close();
?>

关于php - MySQLi 使用 IN 运算符准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11938876/

相关文章:

php - 如何在 SQL 中的代码点火器中应用 2 OR 和 1 AND 条件?

php - 将多个数组值作为整数插入 - PHP MYSQL

php - 如果发生错误,让 PHP 多查询继续

mysql - 在 MySQL 中加入 2 个 sql 查询

c# - 我应该如何处理表单中的单引号以帮助防止 SQL 注入(inject),使用 WebMatrix razor (C#)

mysql - SQL 语句错误并带有 end

php - 将 MySQL 查询转换为可能为空值的准备语句

javascript - html 和 php 文件返回空

php - 授予 PHP 访问 COM 端口的权限

php - 多组SQL数据