mysqli_fetch_allを実行すると、他のmysqli_queryに対してwarningが出る

前提・該当のソースコード

  • 新着記事のスライダー
  • 上記スライダーのサムネ
  • 人気記事

を表示する、以下のページがあります。

php

<?phpinclude_once("./baz.php");?> <!DOCTYPE html><html lang="ja"> <head></head> <body> <section> <h2>記事一覧</h2> <?php $mysql = new mysqli("foo", "bar", "baz", "hoge"); $query = "SELECT * FROM articles WHERE status = 1 ORDER BY date DESC LIMIT 4"; $result = $mysql->query($query); $articles = mysqli_fetch_all($result); ?> <ul class="slider"> <?php forEach ($articles as $slide) { ?> <li><img src="<?php echo $slide[0]; ?>" /></li> <?php } ?> </ul> <ul class="thumb"> <?php forEach ($articles as $thumb) { ?> <li><img src="<?php echo $thumb[0]; ?>" /></li> <?php } ?> </ul> </section> <section> <h2>人気記事</h2> <?php pickup("for_top_page"); ?> </section>

スライダーとサムネは以下のような表示になります。
イメージ説明

人気記事は関数からDOMを返す構造になっています。
人気記事DOMを返す関数はコード数が多いので、詳細なコードは割愛します。

発生している問題・エラーメッセージ

ブラウザで確認すると人気記事DOMを返す関数が書かれている位置に以下のエラーが出ています。

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in /foo/bar/baz.php on line 100

実現したいこと

前述のエラーを解決したいです。

試したこと

mysqli_fetch_allをコメントアウトすると、スライダーとサムネは表示されないものの、人気記事はエラーも無く正常に表示されました。

php

<?php function console_log($data){ echo '<script>'; echo 'console.log('.json_encode($data).')'; echo '</script>'; } $mysql = new mysqli("foo", "bar", "baz", "hoge"); $query = "SELECT * FROM articles WHERE status = 1 ORDER BY date DESC LIMIT 4"; $result = $mysql->query($query); console_log(mysqli_fetch_all($result)); $articles = mysqli_fetch_all($result);?>

また、上記のようにmysqli_fetch_allを実行する前に、console_log内でmysqli_fetch_allを実行すると、下記の結果になりました。

  • スライダーとサムネが表示されない(エラーなし)
  • 人気記事は正常に表示される(エラーなし)
  • コンソールにスライダー用の記事情報の連想配列が表示される
  • 直後の$articlesをconsole_logしてみたところ空の配列だった。

以上のことから下記の仕様を推察しました。

  • mysqli_fetch_allmysqli_queryは共存できない
  • mysqli_fetch_allは1回だけ実行可

ただし、それぞれの関数についてググっても上記のような仕様である説明を見つけられませんでした。

コメントを投稿

0 コメント