加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2021-03-31 04:33:29 所属栏目:MySql教程 来源:网络整理
导读:使用下一个代码更容易解??释(顺便说一下,这是错误的): $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

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

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

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读