Varchar(32)不会接受零MySQL

时间:2014-05-23 21:35:05

标签: php mysql sql

我在MySQL数据库表中有一个名为mileage的字段,其类型为varchar(32)

在我的网页上,我有一个输入字段,用户可以输入里程并发送表格

以下是里程输入的一些PHP验证:

if (empty($_POST["mileage"])) {
        $mileageErr = "Mileage required";
    }   
    else{
    $mileage = htmlspecialchars($_POST["mileage"]);
    }

当我将里程数插入数据库表时:

// validation omitted...

$query = $db->prepare("INSERT INTO cars VALUES ($mileage)");
$result = $query->execute();

当我在输入字段中输入数字0并提交时,我收到错误"Mileage required"

为什么我收到此错误?我已将类型设置为varchar(32),它应该接受任何长度为32的字符串输入吗?

或者有什么东西我不知道如何领导零?

3 个答案:

答案 0 :(得分:4)

您获得的错误与数据库的设置方式无关。如果您的值为零,则为空。

  

以下内容被认为是空的:

     

“”(空字符串)
  0(0为整数)
  0.0(0作为浮点数)
  “0”(0作为字符串)   NULL
  假   array()(一个空数组)
   是$ var; (声明的变量,但没有值)
  http://us3.php.net/empty

如果您想进行正确的检查,请尝试使用isset,然后检查您的帖子是否==“” 所以例如

if(isset($_POST['mileage']) && $_POST['mileage'] != "")

答案 1 :(得分:0)

$_POST["mileage"]将评估为FALSE,因为它为零(有关详细信息,请参阅http://uk3.php.net/empty)。如果变量不存在或者计算结果为FALSE,则该变量被视为空。

答案 2 :(得分:0)

您想检查里程是否存在isset(http://us2.php.net/manual/en/function.isset.php),而不是空(http://us1.php.net/empty)。