Как проверить согласованность типа данных поля во время вставки записи с помощью pdo mysql - PullRequest
0 голосов
/ 25 марта 2012

Предполагается, что тип данных поля varchar. Когда я добавляю в него целое число, он публикует и добавляет его в виде строки,

, и предполагает, что тип данных поля равен 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";
}

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Я не вижу смысла в таких автоматизированных проверках.
Особенно первый.

Необходимо выполнить проверки на уровне приложения, проверяя, соответствует ли значение определенным условиям.

Кстати, Mysql не имеет логического типа поля.

0 голосов
/ 25 марта 2012

Вы можете использовать (экспериментальный) метод PDOStatement::getColumnMeta(int $column), как описано здесь: http://php.net/manual/en/pdostatement.getcolumnmeta.php.

Сравнить с функцией PHP gettype(mixed $var), как описано здесь: http://php.net/manual/en/function.gettype.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...