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