如何使用循环绑定mysqli参数并将结果存储在数组中?
Posted
技术标签:
【中文标题】如何使用循环绑定mysqli参数并将结果存储在数组中?【英文标题】:How to bind mysqli parameters using loop and store results in array? 【发布时间】:2010-10-12 06:46:39 【问题描述】:$genre = array(
'Action',
'Adventure',
'Fantasy'
);
$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();
$array1 = array();
while ($stmt->fetch())
$array1[] = $genres;
当dbGenre
等于$genre
时,上面的代码从genreID
获取值。然后将结果存储在一个数组中。但它不起作用,因为$genre
是一个数组,所以我需要循环遍历它以每次从genreID
获取不同的值。
“流派”表包含两列:genreID (INT) 和 dbGenre (VARCHAR)
我只需要每个genreID(即一个数字)...假设当dbGenre 等于Action 时,然后将genreID 存储在array1 中,然后循环$genre 数组以获得下一个值的genreID 和再次将其存储在array1中。
我该如何解决?
【问题讨论】:
【参考方案1】:您不能将数组绑定到 SQL 参数。您可以在 SQL 中使用参数来代替 单个文字值。不是值列表、表达式、列名或表名。
要解决您的任务,您可以使用以下两种解决方案之一:
第一个解决方案:循环$genre
数组,一次绑定每个值,并为每个值执行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;
第二种解决方案:执行一次查询,带有多个参数,数组中的每个值一个。这需要一些棘手的代码来在 SQL 查询中构建可变数量的 ?
占位符,用逗号分隔。
$selectGenre_sql = 'SELECT genreID FROM genres WHERE dbGenre IN ('
. join(',', array_fill(0, count($genre), '?')) . ')';
此外,您还需要根据 $genre
数组中的元素使用可变数量的参数调用 bind_param()
:
$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;
您可能要考虑使用PDO_mysql
,因为它更容易从数组中绑定参数。对于这种情况,MySQLi 界面非常尴尬。
【讨论】:
【参考方案2】:一些事情。
难道不是因为您覆盖了 $genre var,尝试在第二种情况下将其更改为 $genreArray 吗?确保数据库确实在返回东西(在 phpMyAdmin 或类似的东西中尝试)
尝试如下处理:
.
$genreId = -1;
$stmt->bind_results($genreId);
$stmt->execute();
while($stmt->fetch())
$genreArray[] = $genreId;
【讨论】:
我只需要每个genreID(即一个数字)....可以说..当dbGenre等于Action时,将genreID存储在数组中,然后循环获取genreID下一个数组值..以上是关于如何使用循环绑定mysqli参数并将结果存储在数组中?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中动态绑定 mysqli bind_param 参数?