簡體   English   中英

准備好的語句如何在SQL級別上工作?

[英]How do prepared statements work on an SQL level?

直到現在,我還熱衷於轉義功能和客戶端僅使用sql命令與服務器進行通信的范例:

select * from table where name = 'O\'Hara';

PDO的情況下,您僅創建一些模板並向其提供不同的數據,則這種范例很可能被破壞了。 如果沒有,PDO將只需要調用轉義函數本身,實際上就沒有理由使用它(與自己轉義沒有什么不同)。

因此,如果客戶端和服務器之間的SQL通信范例被破壞,它將如何工作? 查詢不再作為SQL命令發送嗎? 它是MySQL協議的擴展嗎? MySQL協議是否比SQL對話要豐富得多? 它是否可以正常工作,例如使用遠程服務器? 與裸露的SQL命令相比,此功能是否有任何限制?

我曾嘗試過mysql文檔,但未找到任何相關內容。

理論

准備好的語句確實是協議級別的功能,這意味着客戶端首先發送查詢模板,然后在第二個請求中發送參數。 客戶端也可以針對同一查詢(已經准備好)發送多個數據請求。 (這就是為什么這個名字)

現實情況

PDO代碼以某種方式編寫,它沒有利用協議功能,實際上只是對這些值進行轉義,然后用該轉義的值替換語句中的占位符,然后將常規SQL查詢發送到服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM