• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「mysqli_fetch_assoc」で、プリペ)

mysqli_fetch_assocとmysqli_stmt_fetchの違いについて

このQ&Aのポイント
  • 「mysqli_fetch_assoc」と「mysqli_stmt_fetch」は、データベースから取得した結果を行単位で取得するための関数です。
  • 「mysqli_fetch_assoc」は、結果セットから次の行を連想配列として取得することができます。
  • 一方、「mysqli_stmt_fetch」は、プリペアドステートメントを使用して結果を取得する場合に使われます。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

御提示のページは、mysql_ 系で、MySQL4.0 用なので、MySQL4.0がprepared文に対応してないので、prepared文利用時の説明がないのでしょう。 php マニュアルのmysqli_stmt_get_result()解説ページの例文の方が参考になるのでは? 結果取り出し用のmysqli_fetch_array のところを mysqli_fetch_assocに置き換えれば、連想配列で結果が得られます。 http://jp.php.net/manual/ja/mysqli-stmt.get-result.php mysqli_stmt_fetch() は、先にmysqli_stmt_bind_result($stmt, $name, $code);で指定した$name, $codeなどの変数に結果を取り込むための物です。こちらは配列になりませんし、bindし忘れたカラムの結果も得られません。 http://jp.php.net/manual/ja/mysqli-stmt.fetch.php

re999
質問者

お礼

回答ありがとうございました。 >御提示のページは、mysql_ 系で、MySQL4.0 用なので なるほど。全く気がつきませんでした。 解説&リンク先、大変参考になりましたー

その他の回答 (1)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

連投済みませんが、気になったので。 >SELECT idの「id」部分を動的対応 これは、プレースホルダーの意味も理解できてないのかな?カラム名などの識別子は、プレースホルダーにできません。 プレースホルダーは、あくまでも、データ(文字列や数値)の部分をデータ型をチェックして、SQLインジェクションにならないようにするのが目的です。 select id,name from ttt where id=?  この ? 部分を単純に変数で文字置換すると、'0 or 1' などというデータが入っていたときにインジェクションが成立してしまうことがあります。 カラム名の動的変更は、プログラム側でホワイトリストで読み出してもよいカラムなのかチェックしてからSQL文に組入れるのが基本です。

re999
質問者

お礼

アドバイスありがとうございます。 大変参考になりましたー!

関連するQ&A