第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我正在使用 Case 進行 SQL 選擇查詢,并希望動態(tài)計算價格

我正在使用 Case 進行 SQL 選擇查詢,并希望動態(tài)計算價格

PHP
手掌心 2023-10-21 15:49:49
我的控制器代碼$nicepay_commission = Configure::read('nicepay_commission');$paypal_commission = Configure::read('paypal_commission'); $getQuery = $this->OrderProduct    ->find('all', [        'contain' => [            'Orders' => ['PaymentMethods'],            'Products' => ['ProductType']        ]    ])   ->distinct('Products.id')   ->select([        'product_name' => 'MAX(Products.product_name)',        'count' => 'SUM(OrderProduct.qty)',         'actual_rate' => 'SUM(OrderProduct.actual_rate)',        'revenue_based_actual_rate' => '(            SUM(                CASE                WHEN PaymentMethods.payment_gateway = \'nicepay\'                THEN (OrderProduct.actual_rate-((OrderProduct.actual_rate*"'.$nicepay_commission.'")/100))                WHEN PaymentMethods.payment_gateway = \'paypal\'                THEN (OrderProduct.actual_rate-((OrderProduct.actual_rate*"'.$paypal_commission.'")/100))                ELSE (OrderProduct.actual_rate)                END            )        )'   ])   ->where($conditions);但發(fā)生了一些錯誤,我找不到如何管理它。我的錯誤日志看起來像2020-08-20 07:56:56 錯誤:[PDOException] SQLSTATE[42S22]:[Microsoft][SQL Server 的 ODBC 驅(qū)動程序 17][SQL Server]無效的列名“2”。如果我靜態(tài)使用這些值,那么就沒有錯誤$getQuery = $this->OrderProduct    ->find('all', [        'contain' => [            'Orders' => ['PaymentMethods'],            'Products' => ['ProductType']        ]    ])
查看完整描述

1 回答

?
largeQ

TA貢獻2039條經(jīng)驗 獲得超8個贊

首先,如果可以避免,切勿將日期直接插入 SQL 片段,即使您認為它們可能來自安全來源!

也就是說,查看生成的 SQL 查詢(如果您還沒有使用Debug Kit,則應該安裝它),您將值括在雙引號中,即生成的 SQL 將如下所示:

OrderProduct.actual_rate?*?"2"

在 ISO SQL 中,這意味著2將用作標識符。

刪除引號可以解決問題,但是您仍然將動態(tài)數(shù)據(jù)注入到 SQL 字符串中,如果可能的話應該避免這種情況,因此您應該更進一步并綁定值,以減少創(chuàng)建 SQL 的機會注入漏洞:

// ...

->select([

? ? 'product_name' => 'MAX(Products.product_name)',

? ? 'count' => 'SUM(OrderProduct.qty)',?

? ? 'actual_rate' => 'SUM(OrderProduct.actual_rate)',

? ? 'revenue_based_actual_rate' => '(

? ? ? ? SUM(

? ? ? ? ? ? CASE

? ? ? ? ? ? WHEN PaymentMethods.payment_gateway = \'nicepay\'

? ? ? ? ? ? THEN (OrderProduct.actual_rate-((OrderProduct.actual_rate * :nicepayCommission)/100))

? ? ? ? ? ? WHEN PaymentMethods.payment_gateway = \'paypal\'

? ? ? ? ? ? THEN (OrderProduct.actual_rate-((OrderProduct.actual_rate * :paypalCommission)/100))

? ? ? ? ? ? ELSE (OrderProduct.actual_rate)

? ? ? ? ? ? END

? ? ? ? )

? ? )'

])

->bind(':nicepayCommission', $nicepay_commission, 'integer')

->bind(':paypalCommission', $paypal_commission, 'integer')

// ...


查看完整回答
反對 回復 2023-10-21
  • 1 回答
  • 0 關注
  • 162 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號