使用下一个代码更容易解释(顺便说一下,这是错误的):
$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(); . . .
您还需要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接口非常尴尬.