Добавление результатов запроса в arary PDO

#php #mysql #arrays #pdo

#php #mysql #массивы #pdo

Вопрос:

Я пытаюсь добавить результаты запроса в массив. Мой оператор while работает, но я ничего не получаю в своем массиве. Вот мой код:

    $res=$pdo->query("select * from questions where category_id='$category' ORDER BY RAND()");
  $rows = $res->rowCount();
  if ($rows < 1){
    echo "There is no question in the database";
    exit();}

  $questionsArray = array();

  while ($item = $res->fetch(PDO::FETCH_ASSOC)){
    $questionsArray[] = $item;
    echo "There should be some info here<br>";
  }
 

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

1. вы уверены, что у вас нет опечатки везде, где вы на самом деле используете массив? если вы получаете There should be some ... выходные данные, значит, выборка работает. где / как вы будете использовать $questionsArray позже?

2. попробуйте поставить print_r($questionsArray) после закрытия while

3. какой результат вы получаете, когда используете var_dump($item) в своем while() цикле?

Ответ №1:

Возможно, вы захотите рассмотреть что-то подобное с помощью подготовленных инструкций через PDO. Кроме того, цикл while с выборкой плохой и медленный, и был хорош 15 лет назад с MySQL.

Вот правильный способ сделать это.

 define("SQLHOST", "127.0.0.1");
define("SQLUSER", "user");
define("SQLPASS", "password");
define("SQLSGBD", "database");

try {
    $con = new PDO('mysql:host=' . SQLHOST . ';dbname=' . SQLSGBD . ';charset=UTF8', SQLUSER, SQLPASS);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    var_dump('Connection failed: ' . $e->getMessage());
}

$categories = ['A', 'B', 'C'];
$questionsArray = array();
$stmt = $con->prepare("select * from questions where category_id=? ORDER BY RAND()");
foreach ($categories as $key => $cat) {
    $stmt->bindParam(1, $cat, PDO::PARAM_STR);
    $stmt->execute();
    $obj = $stmt->fetchall(PDO::FETCH_ASSOC);
    if (count($obj) !== 0) {
        foreach ($obj as $key2 => $item) {
            $questionsArray[] = [$cat => $item];
        }
    }
}
 

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

1. Ваши идеи о while operator таковы… своеобразно. Не говоря уже о том, что этот пост вообще не затрагивает вопрос.