PHP和MYSQLi – 使用循环和存储在数组中绑定参数?

前端之家收集整理的这篇文章主要介绍了PHP和MYSQLi – 使用循环和存储在数组中绑定参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用下一个代码更容易解​​释(顺便说一下,这是错误的):

        $selectGenre_sql = 'SELECT genreID FROM genres WHERE dbGenre = ?';

        if ($stmt->prepare($selectGenre_sql)) {
        // bind the query parameters
        $stmt->bind_param('s',$genre);
        // bind the results to variables
        $stmt->bind_result($genres);
        // execute the query
        $stmt->execute();
        $genre = array();
            while ($stmt->fetch()) {
                $genre[] = $genres;
            }
        }

当’dbGenre’等于’$genre’时,上面的代码从’genreID’获取值.然后将结果存储在一个数组中.但我不行.为什么?我认为因为’$genre’是一个数组,所以我需要循环它以便每次从’genreID’获得不同的值.

$genre是一个包含电影类型的枚举数组,例如:

[0] =>行动[1] =>冒险[2] =>幻想

我需要比较de值(比如’Action’)

‘genres’表包含两列:genreID(INT)和dbGenre(VARCHAR)

我只需要每个genreID(这是一个数字)….让我们说..当dbGenre等于Action时,然后将genreID存储在array1中,然后循环$genre数组以获取下一个值的genreID,再次将它存储在array1中

我该怎么解决?我是编程的新手,所以请尽可能详细.谢谢!!

最佳答案
您不能将数组绑定到sql参数.您可以在sql中使用参数代替单个文字值.不是值列表,表达式,列名称或表名称.

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

第一个解决方案:遍历$genre数组,一次绑定一个值,并为每个值执行SQL查询.

if ($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;
    }
  }
}

第二种解决方案:使用多个参数执行一次查询,每个参数对应于数组中的每个值.这需要一些棘手的代码来构建可变数量的? SQL查询中的占位符,以逗号分隔.

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

if ($stmt->prepare($selectGenre_sql)) {
  $genre = array();
  . . .

此外,您需要根据$genre数组中的元素调用bind_param()并使用可变数量的参数:

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

  $stmt->execute();

  $stmt->bind_result($genres);

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

您可能需要考虑使用PDO :: MysqL,因为从数组中绑定参数更容易.对于这种情况,MysqLi接口非常尴尬.

猜你在找的MySQL相关文章