2014-01-23 21 views
0

我为我的网站使用许可的软件,当然引擎是加密的。我没有访问和修改任何PHP代码... 它有一个功能,我想改变,我不能修改PHP代码,因为供应商不允许我这样做... The唯一的选择是建立一个单独的自定义脚本,并单独运行它来更新数据库中的字段(这不适合我的项目) 或者更改mysql数据库中的值手册(它不适合)mysql默认值NULL“unchageble” - 是否有可能?

有一个第三种选择,并且我不知道它是否真的有可能......

这里是场景: 脚本每当用户点击特定链接时在数据库中新增一行。该行有10个字段。最后4个字段默认为NULL,它们应该保持为NULL。 该脚本在最后4个字段中插入值,这是不寻常的,当然脚本不再正常工作。

所以我的问题是:有没有什么方法可以防止在数据库中插入4个字段的值?它可以被锁定为NULL吗?该字段可以忽略“SET/UPDATE”函数吗?

回答

2

选项

  1. 在插入不使用这些列插入。
  2. 在插入触发器之前写入以将这些新列值重置为空。
  3. 更新前的编写器会根据where条件重置为空列。

更新

如果您没有访问到你的PHP代码来修改insert说法,你只能通过在数据库中定义的触发器实现这一目标。为此,您至少应该拥有各种权限,如远程连接,创建,执行触发器等。除非您不能这样做。

如果你有这样的权限,你可以在你的数据表,请尝试类似于下面的内容:

before insert触发如下:

delimiter $$ 

drop trigger if exists bfimt_omit_colum_data $$ 

create trigger bfimt_omit_colum_data before insert on my_table 
    for each row begin 
    set NEW.col_name_4_to_set_null = NULL, 
     NEW.col_name_5_to_set_null = NULL, 
     NEW.col_name_6_to_set_null = NULL; 
end; 

$$ 

delimiter ; 

同样的before update触发如下:

delimiter $$ 

drop trigger if exists bfumt_omit_colum_data $$ 

create trigger bfumt_omit_colum_data before update on my_table 
    for each row begin 
    set NEW.col_name_4_to_set_null = NULL, 
     NEW.col_name_5_to_set_null = NULL, 
     NEW.col_name_6_to_set_null = NULL; 
end; 

$$ 

delimiter ; 
+0

我知道,但我无法编辑php代码,因为它是加密的...... – john

+0

那么,'insert'语句可能在您的'php'代码中,您无法修改。你有其他*选项*。连接到您的数据库并定义建议的触发器。 –

+0

我该怎么做?请解释一下,给我一个例子。谢谢! – john

1

您可以像这样定义一个触发器:

delimiter // 
CREATE TRIGGER set_to_null_bi BEFORE INSERT ON tablename 
FOR EACH ROW 
BEGIN 
    SET new.col4 = NULL; 
    SET new.col5 = NULL; 
    SET new.col6 = NULL; 
END// 
delimiter ; 

你也可以创建一个BEFORE UPDATE触发器。

+0

我得到一个愚蠢的错误“与一个表中的同一动作时间和事件的多个触发器” ... :#1235 - 这个版本的MySQL还不支持'具有相同动作时间和事件的多个触发器' – john

+1

@john哦,这可能是因为你的应用程序已经定义了一些触发器...尝试使用SHOW触发器WHERE'表'='tablename'...那么你必须更新你的exising触发器 – fthiella

+0

我认为问题是“DEFINER”,现在它已经解决了,我已经在我的案例中发布了正确的脚本。再次感谢你的帮助! – john

0

感谢大家的帮助,我不能说你的代码是不正确的,但嘿并没有为我工作。我管理由自己来解决这个问题,下面的代码:

DROP TRIGGER IF EXISTS `trigger_null`; 
CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_null` BEFORE INSERT ON `mytable` FOR EACH ROW 
    SET new.create_action = NULL, 
    new.col4 = NULL, 
    new.col5 = NULL, 
    new.col6 = NULL, 
    new.col6 = NULL, 
    new.col7 = NULL, 
    new.col8 = NULL; 

这一切......

感谢您的答复的!