SQL NULL 插入无效
SQL NULL insertion not working
我在向 table 中插入新行时遇到一些奇怪的 SQL 问题。我已将一些列设置为 NULL,就像我在数据库中设置另一个 table 一样。显然,当插入时没有数据通过时,它应该在记录中输入 NULL,但目前不是。
我已经检查了所有设置,并与我的其他 table(正确地将记录插入为 NULL)进行了比较,但找不到问题所在。这些列在 table 中显示如下。
`statement_1` varchar(255) DEFAULT NULL,
没有数据被粘贴(所以不是空白 space 问题)。任何人都可以提出为什么一个 table 按预期进行而另一个不按预期进行的原因吗?
使用下面的插入语句
$statement_a = "INSERT INTO statements (ucsid, statement_1, statement_2, statement_3, statement_4, statement_5, statement_6, statement_7, statement_8, statement_9, statement_10) VALUES (:ucsid, :statement_1, :statement_2, :statement_3, :statement_4, :statement_5, :statement_6, :statement_7, :statement_8, :statement_9, :statement_10)";
$q_a = $this->db_connection->prepare($statement_a);
$q_a->execute(array(':ucsid'=>$ucsid,
':statement_1'=>$statement_1,
':statement_2'=>$statement_2,
':statement_3'=>$statement_3,
':statement_4'=>$statement_4,
':statement_5'=>$statement_5,
':statement_6'=>$statement_6,
':statement_7'=>$statement_7,
':statement_8'=>$statement_8,
':statement_9'=>$statement_9,
':statement_10'=>$statement_10));
此处变量 $statement_1
传递的值将是 ""
试试这个查询 SELECT * FROM my_table WHERE statement_1 =""
。你会得到行。
这意味着您正在为 $statement_1 分配一些值,否则它应该为空。
检查你的代码。希望这有帮助
我是新手,不能添加评论:
尝试使用 NOT phpmyadmin 的简单 INSERT 语句。尝试
http://www.heidisql.com/ OR https://www.mysql.com/products/workbench/
- INSERT INTO 语句 (ucsid) VALUES (123)
- INSERT INTO 语句 (ucsid, statement_1) VALUES (123, NULL)
在这两种情况下,statement_1 都应为 NULL。在您的情况下,这很可能不是。但是,这会告诉您问题出在数据库 table 而不是 php 或您正在使用的 php 执行方法。
另外statement_1字段是否定义为NOT NULL,默认设置为NULL?这不可能发生。
尝试重新创建一个新数据库和一个没有记录的新 table,然后尝试插入 NULL 作为值作为测试。
你也可以 post 你的数据库 SQL 和 table 字符集和排序规则
我已通过使用以下代码确保在未插入任何内容的情况下通过函数传递 NULL 来解决此问题
if($_POST['statement_1'] == '') { $statement_1 = NULL; } else { $statement_1 = $_POST['statement_1']; }
我在向 table 中插入新行时遇到一些奇怪的 SQL 问题。我已将一些列设置为 NULL,就像我在数据库中设置另一个 table 一样。显然,当插入时没有数据通过时,它应该在记录中输入 NULL,但目前不是。
我已经检查了所有设置,并与我的其他 table(正确地将记录插入为 NULL)进行了比较,但找不到问题所在。这些列在 table 中显示如下。
`statement_1` varchar(255) DEFAULT NULL,
没有数据被粘贴(所以不是空白 space 问题)。任何人都可以提出为什么一个 table 按预期进行而另一个不按预期进行的原因吗?
使用下面的插入语句
$statement_a = "INSERT INTO statements (ucsid, statement_1, statement_2, statement_3, statement_4, statement_5, statement_6, statement_7, statement_8, statement_9, statement_10) VALUES (:ucsid, :statement_1, :statement_2, :statement_3, :statement_4, :statement_5, :statement_6, :statement_7, :statement_8, :statement_9, :statement_10)";
$q_a = $this->db_connection->prepare($statement_a);
$q_a->execute(array(':ucsid'=>$ucsid,
':statement_1'=>$statement_1,
':statement_2'=>$statement_2,
':statement_3'=>$statement_3,
':statement_4'=>$statement_4,
':statement_5'=>$statement_5,
':statement_6'=>$statement_6,
':statement_7'=>$statement_7,
':statement_8'=>$statement_8,
':statement_9'=>$statement_9,
':statement_10'=>$statement_10));
此处变量 $statement_1
传递的值将是 ""
试试这个查询 SELECT * FROM my_table WHERE statement_1 =""
。你会得到行。
这意味着您正在为 $statement_1 分配一些值,否则它应该为空。 检查你的代码。希望这有帮助
我是新手,不能添加评论:
尝试使用 NOT phpmyadmin 的简单 INSERT 语句。尝试
http://www.heidisql.com/ OR https://www.mysql.com/products/workbench/
- INSERT INTO 语句 (ucsid) VALUES (123)
- INSERT INTO 语句 (ucsid, statement_1) VALUES (123, NULL)
在这两种情况下,statement_1 都应为 NULL。在您的情况下,这很可能不是。但是,这会告诉您问题出在数据库 table 而不是 php 或您正在使用的 php 执行方法。
另外statement_1字段是否定义为NOT NULL,默认设置为NULL?这不可能发生。
尝试重新创建一个新数据库和一个没有记录的新 table,然后尝试插入 NULL 作为值作为测试。
你也可以 post 你的数据库 SQL 和 table 字符集和排序规则
我已通过使用以下代码确保在未插入任何内容的情况下通过函数传递 NULL 来解决此问题
if($_POST['statement_1'] == '') { $statement_1 = NULL; } else { $statement_1 = $_POST['statement_1']; }