質問 > その他 > SQLについて |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
YuyaMTC |
投稿日時: 2019/6/18 14:00
対応状況: 開発中
|
半人前 登録日: 2019/5/31 居住地: 投稿: 22 |
SQLについて EC CUBEに限らずの質問なのですが、symfony初心者なので教えてください。
Serviceの中で生のSQLを書きたいです。 $video_ordered_query = "SELECT count(*) FROM dtb_order_video WHERE user_id = " . $login_user_id . " AND enabled = 1"; $video_ordered = $this->em->getConnection()->prepare($video_ordered_query); $video_ordered->execute(); 上記のように記述したのですが、問題ないでしょうか? |
kishikawa |
投稿日時: 2019/6/18 14:11
対応状況: −−−
|
一人前 登録日: 2018/12/20 居住地: 松戸 投稿: 89 |
Re: SQLについて 問題はないといえばないですが、
このSQLがよく呼び出されるSQLならば、 プリペアードステートメントを利用するほうがいいです。 SQLがRDBMSにキャッシュされ、次回以降の実行が早くなるためです。 $video_ordered_query = "SELECT count(*) FROM dtb_order_video WHERE user_id = :login_user_id AND enabled = 1"; $params = ['login_user_id' => $login_user_id]; $video_ordered = $this->em->getConnection()->prepare($video_ordered_query); $video_ordered->execute($params); という感じです。 countを取りたいだけならDoctrineでもできます。 以下はCategoryRepository.phpにあるカウント取得の記述です。 /** * 全カテゴリの合計を取得する. * * @return int 全カテゴリの合計数 */ public function getTotalCount() { $qb = $this ->createQueryBuilder('c') ->select('count(c.id)') ->where('c.del_flg = 0'); $count = $qb->getQuery() ->getSingleScalarResult(); return $count; } |
joolensato |
投稿日時: 2019/6/20 15:33
対応状況: −−−
|
常連 登録日: 2019/3/20 居住地: 投稿: 51 |
Re: SQLについて $login_user_idに数字しか入らないと思うのですが
$login_user_idに文字列が入ってしまう場合SQLインジェクションが発生してしまうためプリペアドステートメントを使用された方がいいと思います。 |
YuyaMTC |
投稿日時: 2019/6/20 16:07
対応状況: 確認中
|
半人前 登録日: 2019/5/31 居住地: 投稿: 22 |
Re: SQLについて 今回はDoctorineを使用せずに行おうと思っております。
$video_ordered_query = "SELECT count(*) FROM dtb_order_video WHERE user_id = :login_user_id AND enabled = 1"; $params = ['login_user_id' => $login_user_id]; 上記のSQLを実行する際なのですが、下記の書き方で実行可能でしょうか? EC CUBE3の環境なのですが、実行されませんでした。 $video_ordered = $this->em->getConnection()->prepare($video_ordered_query); $video_ordered->execute($params); |
kishikawa |
投稿日時: 2019/6/20 18:51
対応状況: −−−
|
一人前 登録日: 2018/12/20 居住地: 松戸 投稿: 89 |
Re: SQLについて 実行されないとはどういう状況でしょうか?
私の環境では以下のような呼び出しで実行されました。 (repository内で実行) $stmt = $this->_em->getConnection()->prepare($sql); $stmt->execute($params); $result = $stmt->fetchAll(); |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |