如何检测整数上的填充并将其视为字符串?

时间:2010-04-30 15:14:56

标签: php sql string integer

我有这个函数来准备要在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;
}

1 个答案:

答案 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;
}