2012-03-25 57 views
0

假設字段數據類型爲varchar 當我把它添加一個整數,它會發布並將其添加爲字符串檢查插入記錄時一致的字段數據類型,如何使用PDO的MySQL

,並承擔現場數據類型是int 當我添加一個varchar,它將發佈並將其添加爲數據庫中的「0」,

所以有無論如何檢查數據類型是否等於數據庫中的內容?

所有我想檢查爲varchar,整數和布爾

謝謝

//get column name 

try { 
    $q = $conn->prepare("DESCRIBE subscriber"); 
    $q->execute(); 
    $tableField = $q->fetchAll(PDO::FETCH_COLUMN); 
     } 
    catch(PDOException $e) 
    { 
    die ($e->getMessage()."<a href='view.php' onClick='window.location.reload()'> Back</a>"); 
    } 

     foreach ($tableField as $set) 
     {$counter=0; 
     //if ($set!='Email') 
     $subCol[]=$set; //column name 
     $noOfColumn[]=$counter; //how much column 
     } 


//get column datatype   

foreach ($noOfColumn as $set) 
{ 
try{ 
$sql ='SELECT s.* 
    FROM subscriber s,list_sub ls 
    where ls.ListID = ? 
    AND s.SubID=ls.SubID 
    '; 

$select = $DB->query($sql); 
$meta = $select->getColumnMeta($set); 
$dataType[]=$meta[$subCol['$set']]; //an arrary of datatype 



} 
catch(PDOException $e) 
    { 
    die ($e->getMessage().'<a href="viewAll.php"> Back</a>'); 
    } 
} 

//assume input1='int' , input2='varchar' ,input3='bool' 
//column name in database = input box name 


foreach ($dataType as $compare) 
{if($compare[$subCol['FieldName']]==gettype(mixed $input1)) 
echo "ok, same type"; 
else 
echo "no, not same type"; 
} 
+0

的人,你的代碼格式是可怕的。我試圖讓它理智但失敗。你爲什麼不正確地設計嵌套塊?爲什麼有時候有2個空行,有時候沒有? – 2012-03-25 06:26:51

回答

1

我看到這樣的自動化驗證是沒有意義的。
尤其是前者。

您必須執行應用程序級驗證,檢查值是否符合某些條件。

BTW,Mysql沒有布爾字段類型。

+0

這是由tinyint(1) – 2012-03-25 05:46:31

+0

實施,與您的要求相矛盾,你知道。 – 2012-03-25 05:47:42

+0

@LeoChan tinyint上的長度說明符僅用於zerofilling。它實際上並不影響字段的長度。 BIT字段將更接近布爾值。 – Corbin 2012-03-25 05:48:19

0

您可以使用(實驗性)PDOStatement::getColumnMeta(int $column)方法,如文檔:http://php.net/manual/en/pdostatement.getcolumnmeta.php

與PHP的gettype(mixed $var)功能作爲比較文件的位置:http://php.net/manual/en/function.gettype.php

+0

我可以檢查「111」是整數,但「a111」是varchar? – 2012-03-25 05:47:49

+0

在MySQL中,是的,但不是在PHP中。 'varchar'不是PHP數據類型。這是一種MySQL字符串。 '整數'很好。 – MichaelRushton 2012-03-25 05:50:45

+0

也,那是無法檢查布爾在PHP?我會在這裏寫一些簡單的代碼,請看看 – 2012-03-25 06:02:05