2012-03-08 77 views
0

想知道,如果存在關於如何根據mysql數據類型驗證特定值/變量的任何類,函數或ideia。針對MYSQL數據類型檢查PHP變量類型

我們在PHP中得到了is_int()IS_STRING()is_float()等等等等...但是我們沒有他們。或者我們呢?任何備忘單?有什麼想法嗎?

編輯: 點基本上是:

  • 轉到trought值的陣列(從CSV正在添加例如)。
  • 我知道什麼表,並有所有的列信息(數據類型很好)(與adodb)。
  • 只是檢查各值在一個特定的列適合...
+1

爲什麼你這樣做?如果你不知道MySQL表中存儲的每個字段的數據類型,那麼你做錯了什麼。如果您真的想抽象出東西,請使用ORM庫。 – Bojangles 2012-03-08 00:49:50

+0

您從哪裏獲得需要檢查類型的數據? – zerkms 2012-03-08 00:51:04

+1

我不清楚你正在尋找什麼。 。 。你是否試圖爲逃避查詢處理類型檢測,或者判斷數據是否被允許在特定類型中? 值得一提的是,PHP中的某個值可以匹配MySQL中的許多不同類型 - 例如,值「15.46」可以是任何字符串類型(包括SET/ENUM的值),或者數字類型的編號(例如DECIMAL,FLOAT和DOUBLE)。所以我們需要知道更多的細節給你任何類型的有意義的答案。 – justbeez 2012-03-08 00:53:27

回答

1

如果數據是從一個CSV文件來了,你要記住,所有的值將是字符串(甚至是數字字符串仍然有一個字符串類型)。

所以你不能使用is_int()/is_float() /等,因爲只有告訴你的或變量。您可以使用is_numeric()來檢查值,但是這將允許像「+ 0123.45e6」這樣的指數表示法。有時ctype_digit()可以用於測試整數出於這個原因,因爲它只會允許數字0-9出現在一個字符串中,以便它返回true。

正則表達式也可以用來識別基於模式的數據類型,但你必須與大型數據集時,觀看的性能開銷。從性能角度來看,幾乎總是建議使用preg_函數族而不是ereg函數。

如果您正在驗證諸如ENUM或SET類型的東西,那麼您可能需要創建一個包含合法值的數組(或將其提取爲查詢),然後使用in_array()檢查它們的值。

對於CHAR/VARCHAR字段,你可以解析列定義,然後檢查值的長度是否在限制範圍內。

如果NULL類型被允許在任何你列的,你想也需要檢查這種情況(也可能映射爲空值或字符串「NULL」,以實際NULL值)。

如果你正在尋找正確居然逃脫這些值,考慮使用預處理語句和PDO(PHP數據對象)擴展。這允許MySQL根據類型正確地轉義數據。 (您也可以使用與庫MySQLi預處理語句。)

如果你正在尋找特定的數據類型,以及如何識別它們,那麼你可能需要編輯你的問題,以促進更完整的答案。

+0

我不知道如何編輯,所以我可以更好地解釋我需要什麼。無論如何,這裏的所有好的和有效的點。我所假設的是,我從一開始就認爲,我需要爲我的目的編寫一個函數,並通過所有的可能性。只是希望有一個解決方案。至於第一點,所有字段都是字符串,但「someword」字段不適合mysql DATETIME,也不適合INT中的「123.487」...對嗎?無論如何,我會等待一段時間,並做更多的研究,並可能會接受你的回答:) – eduardev 2012-03-08 01:29:54