我問,因爲我有一個布爾值傳遞給PDO的問題。PHP的is_bool如何區分INT和BOOL?
這個功能讓我真/假:
public function getBoolVal($var){
if (!is_string($var)) return (bool) $var;
switch (strtolower($var)) {
case '1':
case 'true':
case 'on':
case 'yes':
case 'y':
return true;
default:
return false;
}
}
我有這樣一行數據綁定到參數的函數中:
$this->db->bind('active', (bool)$this->getBoolVal($pa['active']));
和bind
函數內部是:
foreach ($this->parameters as $param => $value) {
$type = PDO::PARAM_STR;
switch ($value[1]) {
case is_int($value[1]):
$type = PDO::PARAM_INT;
break;
case is_bool($value[1]):
$type = PDO::PARAM_BOOL;
break;
case is_null($value[1]):
$type = PDO::PARAM_NULL;
break;
}
// Add type when binding the values to the column
$this->sQuery->bindValue($value[0], $value[1], $type);
}
當這些值被綁定時,我得到PDO::PARAM_BOOL
as類型當輸入值$pa['active']
是1,但我總是PDO::PARAM_INT
如果輸入爲0 ...
所以給予1或0,如何在地球上不會is_bool
知道我想要什麼???或者我該如何解決這個問題?
自發布此,我和我的數據庫中的字段TINYINT免掉。我認爲使用整數與我正在處理的外部數據「更安全」。 - 很高興被告知,否則,雖然:) – Warren
你爲什麼不把所有的價值作爲字符串? –