Php 如何使用循环绑定mysqli参数并将结果存储在数组中?

Php 如何使用循环绑定mysqli参数并将结果存储在数组中?,php,arrays,mysqli,Php,Arrays,Mysqli,当dbGenre等于$genre时,上面的代码从genreID获取值。然后将结果存储在数组中。但它不起作用,因为$genre是一个数组,所以我需要循环遍历它,每次从genreID中获得不同的值 “流派”表包含两列:genreID(INT)和dbGenre(VARCHAR) 我只需要每个genreID(这是一个数字)。。。假设dbGenre等于Action时,将genreID存储在array1中,然后循环$genre数组以获取下一个值的genreID,并将其再次存储在array1中 我怎样才能修好

dbGenre
等于
$genre
时,上面的代码从
genreID
获取值。然后将结果存储在数组中。但它不起作用,因为
$genre
是一个数组,所以我需要循环遍历它,每次从
genreID
中获得不同的值

“流派”表包含两列:genreID(INT)dbGenre(VARCHAR)

我只需要每个genreID(这是一个数字)。。。假设dbGenre等于Action时,将genreID存储在array1中,然后循环$genre数组以获取下一个值的genreID,并将其再次存储在array1中

我怎样才能修好它?

有几件事

  • 可能不是因为您覆盖了$genre变量,在sedond案例中尝试将其更改为$genrearay
  • 确保数据库确实返回了内容(在phpMyAdmin或类似的程序中尝试)

  • 请尝试这样处理:


不能将数组绑定到SQL参数。您可以在SQL中使用参数来代替单个文本值。不是值列表、表达式、列名或表名

要解决您案例中的任务,您可以使用以下两种解决方案之一:

第一个解决方案:循环
$genre
数组,一次绑定一个值,并对每个值执行SQL查询

 $genreId = -1;
 $stmt->bind_results($genreId);
 $stmt->execute();
 while($stmt->fetch()){
  $genreArray[] = $genreId;
 }
第二种解决方案:使用多个参数执行一次查询,数组中的每个值对应一个参数。这需要一些复杂的代码来构建SQL查询中数量可变的
占位符,并用逗号分隔

$stmt->prepare($selectGenre_sql);
$genre = array();
foreach ($gengre as $genreID) {
    $stmt->bind_param('s', $genreID);
    $stmt->execute();
    $stmt->bind_result($genres);
    while ($stmt->fetch()) {
        $genre[] = $genres;
    }
}
此外,您还需要根据
$genre
数组中的元素使用数量可变的参数调用
bind_param()

$selectGenre_sql = 'SELECT genreID FROM genres WHERE dbGenre IN ('
 . join(',', array_fill(0, count($genre), '?')) . ')';

您可能需要考虑使用<代码> pdoyMySQL < /Cord>,因为从数组中绑定参数更容易。在这种情况下,MySQLi界面非常笨拙。

我只需要每个genreID(这是一个数字)。。。。让我们说。。当dbgreen等于Action时,将genreID存储在数组中,然后循环获取下一个数组值的genreID。。
$selectGenre_sql = 'SELECT genreID FROM genres WHERE dbGenre IN ('
 . join(',', array_fill(0, count($genre), '?')) . ')';
$stmt->prepare($selectGenre_sql);
$temp = array();
foreach ($genre as $key => $value) {
    $temp[] = &$genre[$key];
}

array_unshift($genre, str_repeat('i', count($genre)));
call_user_func_array(array($stmt, 'bind_param'), $genre);

$stmt->execute();

$stmt->bind_result($genres);

$array1 = array();
while ($stmt->fetch()) {
    $array1[] = $genres;
}