【问题标题】:Why is it inserting 0's instead of blank spaces into my DB using php?为什么它使用 php 在我的数据库中插入 0 而不是空格?
【发布时间】:2010-05-27 23:55:35
【问题描述】:

我有一个插入:

$sql = 'INSERT into orders SET 
fax_int_prefix = "'.$_SESSION['fax_int_prefix'].'", 
fax_prefix = "'.$_SESSION['fax_prefix'].'", 
fax_first = "'.$_SESSION['fax_first'].'", 
fax_last = "'.$_SESSION['fax_last'];

所有这些字段的值是在插入之前它们是空白的。以下是我在插入之前回显的其中一个示例:

$_SESSION[fax_prefix] =

由于某种原因,它插入了整数 0,而不是应有的空值或空值。为什么它在我的数据库中插入 0 而不是空格?

【问题讨论】:

    标签: php mysql insert integer


    【解决方案1】:

    检查表的结构。它可能不是charvarchar 类型(或者它是并且默认值设置为'0')。为此,您可以使用phpmyadminSQLyog 或其他 MySql 管理程序。

    编辑:如果您想存储整数,但可以选择no value,那么请确保该类型可以为空。即:column_name INT(n) DEFAULT NULL

    【讨论】:

    • 嗯,该字段设置为整数。我希望他们在这些字段中提供的信息是整数或空白(无)。我真的需要改变数据类型来做我想做的事吗?
    • 如果您希望它们为空白而不是 0,请确保为该字段提供 allow null
    • 他们确实允许 Null。 Null 框在 phpmyadmin 中被选中,默认设置为 NULL。如果我设置了这些空选项,它怎么还能保存“0”值?
    • 如果您传递的是一个空字符串,您需要对其进行测试并插入 null。因此,您的查询将(简要地)显示为:if ($_SESSION['fax_int_prefix'] == '') $query = 'INSERT INTO orders SET fax_int_prefix NULL' // ...
    • 进一步说明:在 sql 中插入 int 列时,空白字符串转换为零。您必须指定 null 因为它与零不同。 (一个很好的例子是温度列。0°C 是冰点。Null 是“我们不知道值。”)
    【解决方案2】:

    检查数据库的架构。很可能它们是整数字段等。

    SHOW FIELDS FROM orders;
    

    SHOW CREATE TABLE orders;
    

    可能会有所帮助。此外,仅仅打印出一个变量并不是很好的检查,而是使用 var_dump()。

    【讨论】:

    • 使用整数字段有什么问题?我希望他们在这些字段中提供的信息是整数或空白(无)。
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多