取消
顯示的結果
而不是尋找
你的意思是:

不能使用預處理語句與日期功能

雷克斯
新的貢獻者三世

我們是使用PHP和磚SQL的ODBC驅動程序不能運行一個查詢,用戶日期函數用準備好的語句。示例腳本/碼頭工人設置:

https://github.com/rlorenzo/databricks_php/blob/odbc_prepare_error/test_connection.php

例如,下麵的查詢在Python SQL司機:

選擇計數(1)、companyid company_name名稱、係列,從refactored_db investment_date。view_afd companyid不是在(從refactored_db選擇companyid。view_afd哪裏investment_date <日期(現在()間隔64天))和investment_date日期(現在()間隔64天)和日期(現在())GROUP BY companyid, company_name,係列,investment_date有計數(1)< = ?

但使用PHP和我們得到的ODBC驅動程序錯誤:

警告:odbc_prepare (): SQL錯誤:[辛巴][哈迪](80)語法或語義分析錯誤扔在服務器執行查詢。從服務器錯誤消息:org.apache.hive.service.cli。HiveSQLException:錯誤運行查詢:org.apache.spark.sql.catalyst.parser。拋出ParseException:不匹配輸入”?“期待{”(”、“{”、“應用”、“叫”、“修改”、“克隆”、“收集”、“包含”、“轉換”、“複製”、“COPY_OPTIO, SQL 37000在SQLPrepare / test_connection狀態。php在43行odbc_prepare錯誤(辛巴):【堅強】(80)語法或語義分析錯誤扔在服務器執行查詢。從服務器錯誤消息:org.apache.hive.service.cli。HiveSQLException:錯誤運行查詢:org.apache.spark.sql.catalyst.parser。拋出ParseException:不匹配輸入”?“期待{”(”、“{”、“應用”、“叫”、“修改”、“克隆”、“收集”、“包含”、“轉換”、“複製”、“COPY_OPTIO

這是一個已知的問題嗎?我們想使用預處理語句來防止SQL注入成為可能。然而,我們需要放棄似乎準備好的語句如果司機不完全支持它。

1接受解決方案

接受的解決方案

BilalAslamDbrx
尊敬的貢獻者二世
尊敬的貢獻者二世

真討厭。在這種情況下,重寫查詢太乏味,另一個選項是定義作為一個邏輯視圖的查詢和簡單地選擇和應用所需的參數。用這種方法查詢定義中不能包含任何參數;他們必須定義外部視圖。你給它一槍?

在原帖子查看解決方案

6個回答6

BilalAslamDbrx
尊敬的貢獻者二世
尊敬的貢獻者二世

@Rex洛倫佐我將深入挖掘,找出答案。

Kaniz
社區經理
社區經理

嗨社區,僅供參考。

一份事先準備好的聲明中功能用於執行相同的SQL語句(或相似的)多次與效率高。

準備好的語句基本上是這樣工作的:

  1. 準備:一個SQL語句模板創建和發送到數據庫。剩下未指定的某些值,稱為參數(標記為“?”)。例如:插入MyGuests值(?,?,?)
  2. 數據庫分析、編譯和執行查詢優化的SQL語句模板,並將結果存儲沒有執行它
  3. 執行:在以後,應用程序將值綁定到參數和數據庫執行語句。應用程序可以執行該語句多次希望與不同的值

直接執行SQL語句相比,預處理語句有三個主要的優點:

  • 準備好的語句減少解析時間的準備查詢隻完成一次(盡管多次執行的語句)
  • 綁定參數減少帶寬服務器每次你隻需要發送的參數,而不是整個查詢
  • 準備好的語句對SQL注入非常有用,因為參數值,之後使用不同的傳輸協議,不需要正確地逃脫了。如果原始聲明模板不是來源於外部輸入,SQL注入不能發生。

BilalAslamDbrx
尊敬的貢獻者二世
尊敬的貢獻者二世

@Rex洛倫佐道歉我花了很長時間回到你。這絕對是一個錯誤,它在ODBC驅動程序。我們知道它,正在研究它。問題的根源是,司機並沒有完全意識到的SQL解析器火花SQL即最好堅持SQL - 92如您使用的是日期(),這不是標準的SQL。相反,試著用鑄造(日期)或轉換(日期)。

你能試一試,讓我知道發生了什麼?

雷克斯
新的貢獻者三世

@Bilal Aslam我們嚐試演員和轉換和仍然得到相同的錯誤。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map