Pergunta

Será mais fácil explicar com a seguinte código (é errado, por sinal):

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

O código acima obtém o valor de 'genreID' quando 'dbGenre' é igual a '$ gênero'. E, em seguida, armazenar os resultados em uma matriz. Mas i'ts não funciona. Por quê? Acho que é porque '$ gênero' é um array, então eu preciso fazer um loop trough-lo para obter um valor diferente de 'genreID' cada vez.

$ gênero é uma matriz numérica contendo gêneros de filmes, por exemplo:

[0] => Ação [1] => Aventura [2] => Fantasy

Eu preciso comparar de valor (como 'Ação', por exemplo)

A tabela 'gêneros' contém duas colunas: genreID (INT) e dbGenre (VARCHAR)

Eu só preciso de cada genreID (que é um número) .... Vamos dizer .. quando dbGenre é igual à ação, em seguida, armazenar o genreID em uma array1, e depois repetir o array $ gênero para obter o genreID para o próximo valor e armazená-lo novamente em array1

Como posso corrigi-lo ?? Eu sou novo em programação por isso, ser tão detalhado quanto possível. Thanks !!

Foi útil?

Solução

Você não pode associar uma matriz para um parâmetro SQL. Você pode usar um parâmetro em SQL no lugar de um único valor literal . Não é uma lista de valores, ou uma expressão, ou um nome de coluna ou tabela nome.

Para resolver a tarefa em seu caso, você pode usar uma das duas soluções:

Primeira soluo:. Loop sobre matriz $genre, ligam-se cada um valor de cada vez, e executar a consulta SQL para cada valor

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

Segundo solução: executar a consulta uma vez, com vários parâmetros, um para cada valor na matriz. Isso requer algum código complicado para construir um número variável de espaços reservados ? na consulta SQL, separados por vírgulas.

$selectGenre_sql = 'SELECT genreID FROM genres WHERE dbGenre IN ('
 . join(',', array_fill(0, count($genre), '?')) . ')';

if ($stmt->prepare($selectGenre_sql)) {
  $genre = array();
  . . .

Além disso, você precisa obter bind_param() chamada complicado com um número variável de argumentos com base nos elementos na sua matriz $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;
  }
}

Você pode querer considerar o uso de PDO::mysql porque é mais fácil de parâmetros de vinculação de uma matriz. A interface MySQLi é muito estranho para este caso.

Outras dicas

@ Bill Karwin

call_user_func_array não vai passar os argumentos por referência, ele vai passar os valores assim não vai funcionar! ele vai te dar stmt-> Erro bind_param

DOP não é uma solução melhor ... u ainda tem que fazer uma solução para isso também

isso deve ser editado em ur post:

if($stmt = ...same as yours) {
array_unshift($genre, str_repeat('i', count($genre)));
$temp = array();
foreach($genre as $key => $value) {
    $temp[$key] = &$genre[$key];
}
call_user_func_array(array($stmt, 'bind_param'), $temp);
etc...
}

Algumas coisas.

  • Será is't porque seu substituindo o $ gênero var, tente changeing para $ genreArray no caso sedond?
  • Certifique-se de que o banco de dados está realmente voltando coisas (experimentá-lo em phpMyAdmin ou algo similar)

  • Tente processando assim:

.

 $genreId = -1;
 $stmt->bind_results($genreId);
 $stmt->execute();
 while($stmt->fetch()){
  $genreArray[] = $genreId;
 }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top