mysql数据库不能插入空值问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库不能插入空值问题相关的知识,希望对你有一定的参考价值。
我在mysql中建表,其中有一个字段类型为integer(不是主键,也不是自增长的)已经设置为可为空,可运行INSERT INTO sorts(categoryid,parentid,category,first,categoryorder,Icon,Meta,hide,intro) VALUES ('213','27','日本东芝','0','2','','','',''); 时会提示
out of range values adjusted for column"hide";请高手们指点,本人毕业设计发愁中!
可以避免你的问题。
--
以上,希望对你有所帮助。 参考技术A 你在括号内有的列名就必须插入值...如果不想插入值. 则你就不在里面声明.. 参考技术B INSERT INTO sorts(categoryid,parentid,category,first,categoryorder) VALUES ('213','27','日本东芝','0','2');
hide为integer类型,不要用单引号。
PHP/MySQL 插入空值
【中文标题】PHP/MySQL 插入空值【英文标题】:PHP/MySQL Insert null values 【发布时间】:2011-07-16 19:37:52 【问题描述】:我正在为一些 PHP/MySQL 代码而苦苦挣扎。我正在从 1 个表中读取,更改一些字段然后写入另一个表,如果插入并且其中一个数组值为 null 时,我希望它在数据库中插入 null (该字段允许 null 值),则不会发生任何事情。有点像这样:
$results = mysql_query("select * from mytable");
while ($row = mysql_fetch_assoc($results)
mysql_query("insert into table2 (f1, f2) values ('$row['string_field']', $row['null_field']);
并非每一行都有一个空值,在我的查询中还有更多字段和 2 列可能为空,也可能不为空
【问题讨论】:
【参考方案1】:这是一个使用准备好的语句确实可以为您节省一些麻烦的示例。
在 MySQL 中,为了插入空值,您必须在 INSERT
时间指定它,或者将需要额外分支的字段省略:
INSERT INTO table2 (f1, f2)
VALUES ('String Value', NULL);
但是,如果您想在该字段中插入一个值,您现在必须分支您的代码以添加单引号:
INSERT INTO table2 (f1, f2)
VALUES ('String Value', 'String Value');
Prepared statements 会自动为您执行此操作。他们知道string(0) ""
和null
之间的区别并适当地编写您的查询:
$stmt = $mysqli->prepare("INSERT INTO table2 (f1, f2) VALUES (?, ?)");
$stmt->bind_param('ss', $field1, $field2);
$field1 = "String Value";
$field2 = null;
$stmt->execute();
它会为您转义您的字段,确保您不会忘记绑定参数。没有理由继续使用mysql
扩展。使用mysqli
而它是prepared statements。你会为自己拯救一个痛苦的世界。
【讨论】:
@MattP:请注意,PDO 具有相同的行为。在确定一个之前比较每个 API(PDO 更易于使用并且很大程度上与 DB 无关,mysqli 提供对 MySQL API 的更直接访问)。【参考方案2】:我认为你需要在 $row['null_field']
周围加上引号,所以 '$row['null_field']'
如果您没有引号,您偶尔会得到如下所示的插入语句:insert into table2 (f1, f2) values ('val1',)
,这是一个语法错误。
如果是数值字段,则必须在上面做一些测试,如果null_field中没有值,显式设置为null..
【讨论】:
谢谢,我将不得不添加一些额外的测试并明确设置空值,在应用程序中字段为空而不是空字符串更符合逻辑。 很遗憾,如果要插入的值为 NULL,则引用字段将不正确。不能在一个字符串中完成整个语句;将需要类似mysql_query("insert into table2 (f1, f2) values ('$row['string_field']', " . (is_null($row['null_field']), "NULL", "'$row['null_field']'") . ")"
这样的东西,可以通过创建一个帮助函数function quotedValueOrNull( $value ) return (is_null($value), "NULL", "'$value'");
来更容易阅读【参考方案3】:
对于可接受NULL
的字段,您可以使用var_export($var, true)
输出string
、integer
或NULL
文字。请注意,您不会用引号将输出括起来,因为它们将被自动添加或省略。
例如:
mysql_query("insert into table2 (f1, f2) values ('$row['string_field']', ".var_export($row['null_field'], true).")");
【讨论】:
以上是关于mysql数据库不能插入空值问题的主要内容,如果未能解决你的问题,请参考以下文章