如何在php中檢查字符串是否是sql語句的有效兼容列名? 只是一個字符串匹配。檢查有效的SQL列名
23
A
回答
36
最終,每個字符串都是一個有效的列名稱,一旦它被括在雙引號中(MySQL可能不遵守該規則,具體取決於配置,它不使用雙引號作爲默認安裝中的標識符引號)。
但是,如果您想跨平臺(因爲不同的DBMS標籤建議),您應該檢查最小公分母。
這樣做的PostgreSQL manual has a nice definition:
SQL標識符和關鍵字必須以一個字母開頭(A-Z,而且信件,變音符號和非拉丁字母)或下劃線(_)。標識符或關鍵字中的後續字符可以是字母,下劃線,數字(0-9)或美元符號($)。需要注意的是美元符號未在標識符允許根據SQL標準的信,所以它們的使用可能使應用程序的可移植性
所以,你應該檢查與正則表達式如下:
- 開始以字母
- 只包含字符(字母)和數字和下劃線
所以正則表達式像下面應該包括這樣的:
^[a-zA-Z_][a-zA-Z0-9_]*$
由於SQL是不區分大小寫(除非使用雙引號)大寫和小寫字母是允許的。
0
使用
可以使用顯示列或描述查詢。 並從結果中驗證。
1
您可以使用MySQL查詢,如下所示從特定表中獲取的字段:
SHOW FIELDS FROM tbl_name
,然後一些簡單的PHP:
$string_to_check = 'sample';
$valid = false;
$q = mysql_query("SHOW FIELDS FROM tbl_name");
while($row = mysql_fetch_object($q)) {
if($row->Field == $string_to_check) {
$valid = true; break;
}
}
if($valid) {
echo "Field exists";
}
-2
如果我有同樣的問題,我會爲特定的字符列表搜索特定的數據庫文檔,然後以regexp的形式實現它。
但我永遠不會面對這樣的問題,因爲基本的拉丁字符,數字和下劃線都足以說明我使用的任何字段。所以我會保持良好的便攜性和可維護性。
相關問題
- 1. .net火災查詢來檢查有效的查詢和檢索列名
- 2. 如何使用sql/plsql檢查有效的oracle表名
- 3. 檢查域名有效性的Api
- 4. 檢查有效的文件擴展名
- 5. 有效的屬性名稱檢查器
- 6. SQL查詢檢索列名列表
- 7. 檢查兩個有效的URL和有效的域名
- 8. 檢查sql腳本是否有效
- 9. SQL - 無效的列名
- 10. SQL查詢檢索排名列表
- 11. SQL別名給出無效的列名
- 12. SQL檢查列中的所有值
- 13. 檢查有效URL
- 14. 檢查Excel列名與SQL Server 2008列名
- 15. 列名無效SQL Server bug
- 16. SQL腳本無效列名
- 17. Qt檢查有效的URL
- 18. 檢查有效的指針
- 19. 檢查有效的guid
- 20. 檢查有效的線程
- 21. 檢查有效的HTML C#
- 22. 檢查有效的IMEI
- 23. 檢查URL的有效性
- 24. 檢查有效的gravatar(PHP)
- 25. SQL查詢列名
- 26. 有人可以檢查我的sql是否有效[postgresql]
- 27. SQL Server - 用於檢索列名和列總和的查詢
- 28. 插入SQL查詢,缺少列和無效列名
- 29. 的SQL Server +動態查詢「無效的列名稱
- 30. 帶連接的SQL更新查詢 - 無效的列名
for mysql其INFORMATION_SCHEMA表查詢 – 2011-02-12 11:59:30
你是什麼意思的有效?你的意思是該字符串作爲數據庫表中的列存在嗎?或者你的意思是說數據庫是否支持這個字符串作爲列名? – 2011-02-12 11:59:58
@Shakti後者 – 2011-02-12 12:00:43