$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; } }
The code above gets the value from genreID when dbGenre is equal to $genre. And then store the results in an array. But it’s not working because $genre is an array, so I need to loop through it to get a different value from genreID each time.
The ‘genres’ table contains two columns: genreID (INT) and dbGenre (VARCHAR)
I just need each genreID (that is a number)… Let’s say when dbGenre is equal to Action, then store the genreID in an array1, and then loop the $genre array to get the genreID for the next value and store it again in array1.
How can I fix it?
You can’t bind an array to an SQL parameter. You can use a parameter in SQL in place of a single literal value. Not a list of values, or an expression, or a column name or table name.
To solve the task in your case, you can use either of two solutions:
First solution: loop over
$genrearray, bind each value one at a time and execute the SQL query for each value.Second solution: execute the query once, with multiple parameters, one for each value in the array. This requires some tricky code to build a variable number of
?placeholders in the SQL query, separated by commas.Also you need to get tricky calling
bind_param()with a variable number of arguments based on the elements in your$genrearray:You might want to consider using
PDO_MYSQLbecause it’s easier to bind parameters from an array. The MySQLi interface is pretty awkward for this case.