PHP Предупреждение mysqli_fetch_asso c () - PullRequest
0 голосов
/ 09 января 2020

PHP ВЕРСИЯ: 7.1 Я смотрю mmtuts PHP видео о том, как создать опцию загрузки для пользователей. Когда я следил за видео, написанный им код прекрасно работал на локальном хосте (база данных (mysql) через xampp), но потом, когда я пошел в HostGator, чтобы подключить его к реальной базе данных. Я получаю сообщение об ошибке:

Неустранимая ошибка: ошибка Uncaught: вызов неопределенной функции mysqli_stmt_get_result () в gallery.phpon line45

Я нашел ошибку на этом веб-сайте, большинство ответов которой ответили проверьте мои PHP расширения, но я не могу найти расширения mysqlnd и nd_mysqli в панели управления Hostgator в PHP .INI. Если вы можете вести меня через это было бы оценено. Однако в других ответах также говорилось, что я могу использовать метод bind и fetch, и даже после того, как я посмотрел, как преобразовать этот код в метод bind и fetch, я действительно не понимаю его. Я совершенно новичок в PHP (7-й день обучения), поэтому я ищу совет, как решить эту проблему. Заранее спасибо.

   <?php
        include_once 'includes/dbh.inc.php';

        $sql = "SELECT * FROM gallery ORDER BY orderGallery DESC;";

        $stmt = mysqli_stmt_init($conn);
        if (!mysqli_stmt_prepare($stmt, $sql)) {
          echo "SQL statement failed!";
        } else {

          mysqli_stmt_execute($stmt);
          $result = mysqli_stmt_get_result($stmt);

          while ($row = mysqli_fetch_assoc($result)) {
            echo '<a href="#">
              <div style="background-image: url(img/gallery/'.$row["imgFullNameGallery"].');"></div>
              <h3>'.$row["titleGallery"].'</h3>
              <p>'.$row["descGallery"].'</p>
            </a>';
          }
        }
        ?>

Ответы [ 2 ]

1 голос
/ 09 января 2020

Я думаю, ваш драйвер mysqlnd установлен правильно? Согласно комментарию в Руководстве :

Если вам не хватает установленного / загруженного mysqlnd или у вас его не установлено, вы получите неопределенную ссылку при попытке вызвать "mysqli_stmt_get_result" () ".

Наконец, здесь форум, на котором обсуждается информация, касающаяся использования драйвера с cpanel, которая может оказаться вам полезной.

0 голосов
/ 09 января 2020

Функция mysqli_stmt_get_result опирается на функцию, которая доступна только при использовании указанного c адаптера (mysql собственный драйвер [который на самом деле лучше, но некоторые хостинг-провайдеры не любят некоторые из его функций или просто предоставляют очень old php ...] вместо libmysqlclient).

Лучше всего начать с изучения PDO, но если вы хотите придерживаться mysqli, тогда я также рекомендую использовать объект- ориентированный стиль - хороший пример, который вы можете найти здесь: https://www.php.net/manual/en/mysqli-stmt.execute.php

Но просто чтобы исправить ваш файл:

0) Основная проблема (с этим старым libmysqlclient) это то, что вам нужно точно знать, сколько столбцов у вас будет - я вижу, что вы хотите три: - imgFullNameGallery - titleGallery - descGallery

Затем измените ваш запрос из:

$sql = "SELECT * FROM gallery ORDER BY orderGallery DESC;";

на:

$sql = "SELECT imgFullNameGallery, titleGallery, descGallery FROM gallery ORDER BY orderGallery DESC;";

1) заменить строку

$result = mysqli_stmt_get_result($stmt);

на:

mysqli_stmt_bind_result($stmt, $imgFullNameGallery, $titleGallery, $descGallery);

Теперь заменить:

while ($row = mysqli_fetch_assoc($result)) {
            echo '<a href="#">
              <div style="background-image: url(img/gallery/'.$row["imgFullNameGallery"].');"></div>
              <h3>'.$row["titleGallery"].'</h3>
              <p>'.$row["descGallery"].'</p>
            </a>';
          }

на:

while (mysqli_stmt_fetch($stmt)) {
    echo '<a href="#">
      <div style="background-image: url(img/gallery/'.$imgFullNameGallery.');"></div>
      <h3>'.$titleGallery.'</h3>
      <p>'.$descGallery.'</p>
    </a>';
}

Как видите, каждый вызов fetch заполнит связанные переменные * 103 4 *, $titleGallery и $descGallery с соответствующими значениями из строки базы данных. (переменные могут фактически называться по-разному, это не имеет значения, их значение имеет значение)

Также ниже, если вы не используете его повторно, обязательно закройте устав:

mysqli_stmt_close($stmt);

и связь:

mysqli_close($link);

Дайте мне знать, поможет ли это вам. Кроме того: тот факт, что вам нужно сделать это, объясняется только тем, что ваш хостинг-провайдер ограничивает вашу функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...