Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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
Mysql 如何在FUEL/ActiveRecord中插入空值_Mysql_Activerecord_Insert_Null_Fuelphp - Fatal编程技术网

Mysql 如何在FUEL/ActiveRecord中插入空值

Mysql 如何在FUEL/ActiveRecord中插入空值,mysql,activerecord,insert,null,fuelphp,Mysql,Activerecord,Insert,Null,Fuelphp,简短转发:我试图在FUEL论坛上问这个问题,但每次我尝试注册时,他们的论坛都会说“发送激活电子邮件失败”,我无法登录或重置我的帐户。所以希望这里的人们会来看看。我以前在这个网站上见过一些FUEL的开发者 下面是mysql表的一个示例: CREATE TABLE `test` ( `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` VARCHAR( 128 ) NULL , `last_logi

简短转发:我试图在FUEL论坛上问这个问题,但每次我尝试注册时,他们的论坛都会说“发送激活电子邮件失败”,我无法登录或重置我的帐户。所以希望这里的人们会来看看。我以前在这个网站上见过一些FUEL的开发者

下面是mysql表的一个示例:

CREATE TABLE `test` (
  `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `username` VARCHAR( 128 ) NULL ,
  `last_login` DATETIME NULL
) ENGINE = InnoDB 
显然,与许多人不同,我个人喜欢利用数据库的空值。用外行的话说,NULL意味着它从未用值初始化过。在这种情况下,如果我们的用户从未登录过,我希望在他的记录中反映这一点,使最后一个_登录值等于NULL。因此,NULL=“从未登录。”

如果要通过命令行或phpMyAdmin之类的方式向数据库添加新用户,我会输入以下查询

INSERT INTO `test` (
    `user_id` ,
    `username` ,
    `last_login`
)
VALUES (
    NULL , 'test_person_1', NULL
);
这是该查询的结果

+---------+---------------+--------------+
| user_id |    username   |  last_login  |
+---------+---------------+--------------+
|    1    | test_person_1 |     NULL     |
+---------+---------------+--------------+
现在,让我们使用FUEL的ActiveRecord

这是我的模型(非常简单):

这是我运行该方法后得到的结果:

mysql> select * from test;
+---------+---------------+---------------------+
| user_id | username      | last_login          |
+---------+---------------+---------------------+
|       1 | test_person_1 | NULL                |
|       2 | test_person_2 | 0000-00-00 00:00:00 |
+---------+---------------+---------------------+
2 rows in set (0.00 sec)
请注意,test_person_2的DATETIME字段是“0000-00-00:00:00”,它不是空的。即使我特别声明最后一次登录为null,FUEL的ActiveRecord类也会使其不为null。例如

public function action_save_example1()
{
    $o_user = new Model_Test(array(
        'username' => 'test_person_2',
        'last_login' => NULL
    ));
}
我感觉这就是ActiveRecord正在运行的查询

INSERT INTO `portal_links`.`test` (
    `user_id` ,
    `username` ,
    `last_login`
)
VALUES (
    NULL , 'test_person_2', ''
);
在插入或更新之前,需要有某种逻辑来测试值===NULL,如果该值为NULL,则应使用关键字NULL而不是“”。CodeIgniter的ActiveRecord类似乎理解NULL和“”之间的区别


这不是你问题的答案。但AR正在或刚刚失去支持。查看新的orm包。文档正在制作中


祝你好运。

很高兴我们杀死了那个AR。它是第三方的,虽然它有一个很好的API,但它相当弱。ORM更好。
public function action_save_example1()
{
    $o_user = new Model_Test(array(
        'username' => 'test_person_2',
        'last_login' => NULL
    ));
}
INSERT INTO `portal_links`.`test` (
    `user_id` ,
    `username` ,
    `last_login`
)
VALUES (
    NULL , 'test_person_2', ''
);
<?php
// CodeIgniter Example
$o_query = $this->db->insert('test', array(
   'user_id' => NULL,
   'username' => 'code_igniter_user',
   'last_login' => NULL
));