Как использовать функцию bind_result с SELECT * query

#php #mysqli

#php #mysqli

Вопрос:

Я ищу способ получить полную строку из подготовленной инструкции mysqli, не зная количества столбцов

Это то, что я успешно протестировал

 if ($stmt = $con->prepare("SELECT user_id FROM users where user_id = ?")) {
  $stmt->bind_param('s', '32');        
  $stmt->execute();
  $stmt->bind_result($user_id);
  while ($stmt->fetch()) {
      printf ("%s n", $user_id);
  }
  $stmt->close();
}
  

Это сработало нормально, но что делать, если мне нужны все столбцы, и мой запрос будет *

 if ($stmt = $con->prepare("SELECT * FROM users where user_id = ?")) {
  $stmt->bind_param('s', '32');        
  $stmt->execute();

  $stmt->close();
} 
  

Как использовать подготовленную инструкцию mysqli для SELECT * ?

Комментарии:

1. Используйте PDO вместо mysqli. С PDO у вас никогда не возникнет подобных проблем .

2. есть ли какой-либо способ в mysqli

3. Да, как вы, возможно, уже узнали, если щелкнуть ссылку, которую я опубликовал

4. не могли бы вы привести какой-нибудь рабочий пример

5. я просто хочу избавиться от bind_result() , потому что количество столбцов неизвестно

Ответ №1:

Если вы извлекаете неизвестное количество столбцов из результирующего набора, вы не можете использовать bind_result() . Эта функция полезна для одного столбца или если у вас небольшое фиксированное количество столбцов.

Чтобы получить результат от SELECT * использования get_result() , который вернет mysqli_result объект, который вы можете перебирать или извлекать одну строку.

 $user_id = 32;
$stmt = $con->prepare("SELECT * FROM users where user_id = ?");
$stmt->bind_param('s', $value);        
$stmt->execute();
$result = $stmt->get_result();
foreach($result as $row) {
    printf ("%s n", $row['username']);
}
  

Эта функция недоступна в некоторых очень старых версиях PHP или в тех, которые скомпилированы для клиента libmysql