当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《PHP和MYSQLi-使用循环和存储在数组中绑定参数?》经验,为你挑选了1个好方法。

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

        $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中

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



1> Bill Karwin..:

您不能将数组绑定到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();
  . . .

您还需要bind_param()根据$genre数组中的元素使用可变数量的参数进行棘手的调用:

  . . .
  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接口非常尴尬.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有