前提・該当のソースコード
- 新着記事のスライダー
- 上記スライダーのサムネ
- 人気記事
を表示する、以下のページがあります。
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_all
とmysqli_query
は共存できないmysqli_fetch_all
は1回だけ実行可
ただし、それぞれの関数についてググっても上記のような仕様である説明を見つけられませんでした。
0 コメント