我有这个函数来准备要在SQL查询中使用的变量:
function sqlize($mInput)
{
if (!isset($mInput))
$mInput = "null";
elseif (strtolower($mInput) == "null") { }
elseif (is_numeric($mInput)) { }
elseif (is_string($mInput))
{
$mInput = trim($mInput);
$mInput = addslashes($mInput);
$mInput = '"' . $mInput . '"';
}
else
$mInput = "null";
return $mInput;
}
我有一个字符串“0004”,它位于“varchar字段”中,由is_numeric
提供,并保存为“4”而不是“0004”。有没有办法检测填充并将其作为字符串处理?
谢谢!
修改
根据Cesar和webbiedave提示做出正确答案:
function sqlize($mInput)
{
switch(TRUE)
{
default: break;
case (!isset($mInput)): $mInput = "null"; break;
case (strtolower($mInput) == "null"): break;
case (is_numeric($mInput)):
if ((string) intval($mInput) === (string) $mInput)
break;
case (is_string($mInput)):
$mInput = trim($mInput);
#v2
$mInput = $_SESSION['oCore']->oDatabase->sanatize($mInput);
// ADOdb's oDb->qstr();
# v1
#$mInput = addslashes($mInput);
#$mInput = '"' . $mInput . '"';
break;
}
return $mInput;
}
答案 0 :(得分:3)
而不是is_numeric()
使用(int)$var == $var
我看到了开关的美妙用法,应该是这样的:
function sqlize($mInput)
{
switch(TRUE)
{
default:
case (!isset($mInput)): $mInput = "null"; break;
case (strtolower($mInput) == "null"): break;
case (is_numeric($mInput)): break;
case (is_string($mInput)):
$mInput = trim($mInput);
$mInput = addslashes($mInput);
$mInput = '"' . $mInput . '"';
break;
}
return $mInput;
}