アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL文をユーザー定義関数でまとめたいのですが、うまくいきません。
以下の処理を全てfunction search() {
}の中に入れるのは間違っていますか? 関数名はsearchとしました。

try {
$sql = 'SELECT product.id, name, price, img, status, stock
FROM product
JOIN item_stock
ON product.id = item_stock.stock_id
WHERE status = 1';
$stmt = $dbh->prepare($sql);
$stmt->execute();
$result = $stmt->fetchALL();
$err_msg[] = ($keyword . 'を含む商品は見つかりませんでした。');
} catch (PDOException $e) {
$err_msg[] = '商品を取得できませんでした。';
}

質問者からの補足コメント

  • どう思う?

    function search () {
    // 処理
    }
    とすると、上記の()の中に何を入れればいいかが
    よくわからないです。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/03/05 21:51
  • どう思う?

    関数名をsearchとして

    function search () {
    // 処理
    }

    とすると、上記の()の中に何を入れればいいかが
    よくわからないです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/03/06 10:53

A 回答 (4件)

みなさんの言ってることを要約して貴方の補足質問に答えるなら、


つまりは↓こういうことです。


function search ($dbh, $keyword ) {
// 処理
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result;
}


$result = search($dbh, $keyword);
if(empty($result)){
$err_msg[] = ($keyword . 'を含む商品は見つかりませんでした。');
}
    • good
    • 0

SQL内にありませんが、$keywordは引数として受け取るべきでしょうね。


あとモデル層の操作としては、問い合わせ結果をそのまま呼び出し元へ返却すべきです。
データがあった時、なかった時にどう制御するかは、その時によって異なるわけですから、その制御がモデル層と密に関わってはいけません。
この回答への補足あり
    • good
    • 0

ハマりそうな箇所が散見されます


ユーザー関数にするとして、$dbhなどをどう持ち込むか
戻り値を取り出すかが全然考慮されてなさそうです。

検索条件をうけとらないならprepareは不要ですqueryで十分。
fetchAllするときはassocを利用してください
try-catchは検索がヒットしたかしないかではありません
この回答への補足あり
    • good
    • 0

>間違っていますか?


間違ってないですよ。

動作に不具合があるのは、別問題かと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!