Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL ALTER TABLE DEFAULT NULL仍然插入0_Php_Mysql - Fatal编程技术网

Php SQL ALTER TABLE DEFAULT NULL仍然插入0

Php SQL ALTER TABLE DEFAULT NULL仍然插入0,php,mysql,Php,Mysql,我在php文件中有一个altertable查询,其中表名基于$name变量 e、 g.$table=“分数:”.$name 我已将$table变量替换到INSERT语句中,并验证它是否确实有效 scores_name表由整数字段(smallint)组成,当$POST值为空时,插入表中的数字为0(默认情况下) 但是,当满足某个条件时(在非空字段中),该特定行的值故意设置为0 有时,$POST值应该为空,因此我希望该特定行为空,因此当它作为0而不是此插入时,这会导致明显的混淆 以下是我的alter语

我在php文件中有一个
altertable
查询,其中表名基于$name变量

e、 g.
$table=“分数:”.$name

我已将
$table
变量替换到
INSERT
语句中,并验证它是否确实有效

scores_name表由整数字段(smallint)组成,当
$POST
值为空时,插入表中的数字为0(默认情况下)

但是,当满足某个条件时(在非空字段中),该特定行的值故意设置为0

有时,
$POST
值应该为空,因此我希望该特定行为空,因此当它作为0而不是此插入时,这会导致明显的混淆

以下是我的alter语句,共有5个游戏行,因此当该特定游戏的列为空时会触发此alter查询:

if($game1(empty))
{
   $query = "ALTER TABLE `$table` MODIFY COLUMN `game1` SMALLINT DEFAULT NULL";
   $result = mysql_query($query) or die (' ' . mysql_error() );
}
没有返回mysql错误,因此我假设
ALTER
语句正确完成,但是为什么它仍然插入0,尽管被修改为默认为NULL


真的没有办法在基于整数的表中存储空值吗?

考虑以下几点

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRiMARY KEY,x INT DEFAULT NULL);

INSERT INTO my_table (x) VALUES (0),(''),(' '),(NULL);

INSERT INTO my_table (id) VALUES (0),(''),(' '),(NULL);

INSERT INTO my_table VALUES (DEFAULT,DEFAULT);

SELECT * FROM my_table;
+----+------+
| id | x    |
+----+------+
|  1 |    0 |
|  2 |    0 |
|  3 |    0 |
|  4 | NULL |
|  5 | NULL |
|  6 | NULL |
|  7 | NULL |
|  8 | NULL |   
|  9 | NULL |
+----+------+
9 rows in set (0.00 sec)
有时$POST值应该为空,因此我希望该行为空,因此当它作为0而不是此插入时,这会导致明显的混淆

通过该语句,我了解到您不希望在列中填充值,而是创建列时定义的
默认值

在列中插入
默认值的可能方法有:

  • INSERT
    ing时不要在查询中使用该列
  • 如果满足条件,则使用
    默认值
    代替值 关于这个专栏
  • 示例
    例如,表的定义如下所示:

    create table tbl_so_q23869976( si smallint default null, col2 varchar(10) );
    
    让我们看看如何将默认值设置为
    si

    案例1:一切正常,然后:

    $sql = "insert into tbl_so_q23869976( si, col2 ) values ( ?, ? )";
    $stmt = $mysqli->prepare( @sql );
    $stmt->bind_param( 'ds', 6, 'Ravin' ); // use proper variables in place of values
    
    案例2.1:如果某个内容不匹配,则:

    /* use with 'default' to insert defaults */
    $sql = "insert into tbl_so_q23869976( si, col2 ) values ( default, ? )";
    $stmt = $mysqli->prepare( @sql );
    $stmt->bind_param( 's', 'Ravin' ); // use proper variables in place of values
    
    /*just omit the column name into which you want to insert defaults */
    $sql = "insert into tbl_so_q23869976( col2 )  values ( ? )";
    $stmt = $mysqli->prepare( @sql );
    $stmt->bind_param( 's', 'Ravin' ); // use proper variables in place of values
    
    案例2.2:如果某个内容不匹配,则:

    /* use with 'default' to insert defaults */
    $sql = "insert into tbl_so_q23869976( si, col2 ) values ( default, ? )";
    $stmt = $mysqli->prepare( @sql );
    $stmt->bind_param( 's', 'Ravin' ); // use proper variables in place of values
    
    /*just omit the column name into which you want to insert defaults */
    $sql = "insert into tbl_so_q23869976( col2 )  values ( ? )";
    $stmt = $mysqli->prepare( @sql );
    $stmt->bind_param( 's', 'Ravin' ); // use proper variables in place of values
    

    “blank”是什么意思?insert命令是什么?据我所知,int中不能有“blank”值column@Strawberry,如中所示,在该字段中不显示任何内容。您是否尝试按如下方式插入“插入到您的表(游戏1)值(“”)?删除表对我来说会有问题,有什么办法我可以不做就直接修改它吗?顺便说一句,我只是使用mysql_查询函数编写php代码,所以我没有使用这种语法。@user3577618:这个解决方案并不建议您删除表。但是,当您想从用户处跳过无效的输入数据时,请尝试使用关键字
    default
    。它演示了一大堆事情,其中没有一件是关于删除您自己的表的。停止离开终点站。拿一杯热饮料。然后回来花点时间来消化上面提供的示例。@user3577618请查看INSERT语句和tyble中的结果!特别是第一个和最后一个。当我创建实际的表并初始化字段,例如“game1 SMALLINT,game2 SMALLINT”时如何。我改为“game1 SMALLINT DEFAULT NULL,game2 SMALLINT DEFAULT NULL”?对不起,我很困惑,我以前从未使用过mysqli,是否有一个mysql等价物可以跳过插入NULL值?不幸的是,这个代码对我来说毫无意义。我只想跳过该列(使其为空),如果变量在提交时被保留为空,即使将其设置为NULL,因为无论发生什么情况,默认值仍然打印0。只要将空字段设置为除0以外的任何值,我就会很高兴。如果将字段设置为数字,但在输出表格时将其显示为空白(类似于zerofill,更改表示形式),也可以接受