• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPとSQLをコンパクトにまとめたいです)

PHPとSQLをコンパクトにまとめて検索する方法

このQ&Aのポイント
  • PHPとSQLを使って、部分一致検索して商品をコンパクトに表示する方法を解説します。
  • 検索されたキーワードを含む商品が見つかった場合はその商品だけを表示し、見つからなかった場合はエラーメッセージと商品一覧を表示します。
  • また、ステータスが1(公開)の販売商品のみを一覧で表示します。

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

  • ベストアンサー
  • agehage
  • ベストアンサー率22% (2752/12072)
回答No.1

(1)SQLの処理は関数化しましょう $stmt = $dbh->prepare($sql); $stmt->bindValue(1, $keyword, PDO::PARAM_STR); // SQLを実行 $stmt->execute(['%' . $keyword . '%']); $result = $stmt->fetchALL(); } catch (PDOException $e) { $err_msg[] = '商品を取得できませんでした。'; } 上記が1行にできるはずです 3回同じ処理をしているので相当スマートに書き直せるはずです (3)ifは真1か偽0かしか見ていませんので、結果がboolで返される関数の場合は、比較演算を省略できます つまり isset($_POST['keyword']) === TRUE は isset($_POST['keyword']) だけでいいです mb_strlen ($_POST['keyword']) > 0 も文字があるかどうかなので、文字がないすなわち0と返されるわけですから mb_strlen ($_POST['keyword'])  だけでもいいです 但しコードの可読性のために、あえて最初の書き方をするのは間違いではありません。 (おまけ)質問とは関係ないですけどPOSTされてきたデータをそのまま使うのはとても気が引けます 一旦安全な形で変数に格納するのが良いです

OBAKEI
質問者

補足

if (isset($_POST['keyword']) && mb_strlen ($_POST['keyword']) > 0) { search(); } else { list(); } function search() { // ~ } function list() { // ~ } のような感じでしょうか?

関連するQ&A