PHP и MYSQLi - Связать параметры с помощью цикла и хранилища в массиве?

При проверке исходного кода VpnSettings # deleteProfile () - ничего не транслируется.

Похоже, единственным доступным обратным вызовом является VpnService # onRevoke () ; как указано в документации:

Вызывается при отзыве приложения. В этот момент интерфейс VPN уже деактивирован системой. Приложение должно закрыть файловый дескриптор и корректно завершить работу. Реализация этого метода по умолчанию вызывает Service#stopSelf().

BLOCKQUOTE>

5
задан Jonathan 9 March 2009 в 20:11
поделиться

2 ответа

Вы не можете связать массив с параметром 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 является довольно неловким для этого случая.

8
ответ дан 13 December 2019 в 19:36
поделиться

Несколько вещей.

  • Это мог быть is't, потому что Ваша перезапись var $genre, попробуйте changeing это к $genreArray в sedond случае?
  • Удостоверьтесь, что база данных на самом деле возвращается, вещи (попробуйте ее в phpMyAdmin или чем-то подобном),

  • Попытайтесь обработать как это:

.

 $genreId = -1;
 $stmt->bind_results($genreId);
 $stmt->execute();
 while($stmt->fetch()){
  $genreArray[] = $genreId;
 }
0
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: