バージョン選択

フォーラム

メニュー

オンライン状況

113 人のユーザが現在オンラインです。 (81 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 112
suzuka もっと...

サイト内検索

質問 > その他 > 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
居住地:
投稿: 50
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
居住地:
投稿: 30
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
居住地:
投稿: 50
Re: SQLについて
実行されないとはどういう状況でしょうか?
私の環境では以下のような呼び出しで実行されました。
(repository内で実行)

$stmt = $this->_em->getConnection()->prepare($sql);
$stmt->execute($params);
$result = $stmt->fetchAll();
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は54,517名です
総投稿数は94,239件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
2016
4
468
1920
5
yuh
1610
6
umebius
1418
7
red
1376
8
h_tanaka
940
9
fukap
907
10
tsuji
856
11
shutta
835
12 ramrun 789
13
tao_s
781
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.