当前位置: 首页 > 面试题库 >

准备好的语句“ WHERE .. IN(..)”查询和排序-使用MySQL

臧兴学
2023-03-14
问题内容

假设我们有一个查询:

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;

以及要获取的ID数组: $ids = array(1,5,18,25)

预处理语句它劝准备一个语句,并调用它多次:

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;');
foreach ($ids as $id){
    $stmt->bind_params('i', $id);
    $stmt->exec();
    }

但是现在我必须手动对结果进行排序。我有其他不错的选择吗?


问题答案:

您可以这样进行:

$ids = array(1,5,18,25);

// creates a string containing ?,?,? 
$clause = implode(',', array_fill(0, count($ids), '?'));


$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;');

call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

// loop through results

使用此方法,您将为每个id调用bind_param,并且已由mysql完成排序。



 类似资料:
  • 我有一个类,其中我使用旧的jdbc方法创建了到h2数据库的连接,该方法编写url并获取连接,我在数据库中创建了一个表,这个表不是java对象,所以我用尽了聪明的方法来为我的方法编写测试 //我还创建了一个表app_user公共void addUser(连接连接,字符串登录,字符串密码,字符串描述)抛出SQLException{ 而我的测试方法看起来像这样,有没有办法让它不那么整洁,更简单,我试图用

  • 问题内容: 我的目的是在表中找到与存储在String中的集合匹配的所有项目: 这似乎并不完美,它总是向我发出以下警告: 如果我有一个参数,这将是显而易见的: 但是由于我不得不处理这个问题,这对我来说有点复杂。 问题答案: Prepared语句没有参数,因为您在准备列表之前已将列表插入到该语句中。 至此,您创建的SQL语句为: 由于该语句没有参数,因此失败。而不是将项目插值到语句(容易注入)中,而是

  • 问题内容: 我正在使用nodejs npm软件包, 我目前有一系列产品skus,例如.. 我的sql存储在文件中,如下所示… 然后,我还准备了如下语句: 正确地包含在对象中,因为当我简单地使用它时,该语句可以正常工作,我只是在努力如何传递数组以使它们在准备好的语句中工作。 我使用和修改字符串,以逗号分隔等,但我无法使这些方法正常工作。 我以为我需要param字符串才能如下所示。 如果有人可以阐明如

  • 问题内容: 我正在编写一些SQL,并使用AdoDb连接到我的数据库并运行查询等等。我正在使用参数化查询,并且遇到了麻烦。 它们是将值的数组传递给AdoDb / MySql中的in_clause进行参数化的一种方法。 我的问题是,如果我将准备好的字符串作为参数传递,即 ‘test’,’test2’,’test3’, 则它不起作用,因为库或数据库会自动对其进行转义并在开头和结尾处添加外部引号,因此所有