我正在为我的网站使用许可软件,当然引擎已加密。我无权访问并修改任何PHP代码... 它有一个我想要改变的功能,我不能修改PHP代码,因为供应商不允许我这样做... 唯一的选择是构建一个单独的自定义脚本并单独运行它来更新数据库中的字段(这不适合我的项目) 或者更改mysql数据库中的值手册(同样不适用)
还有第三种选择,我不知道它是否真的可能......
这是场景: 只要用户单击特定链接,脚本就会在数据库中广告新行。那一行有10个字段。最后4个字段默认为NULL,它们应保持为NULL。 该脚本在最后4个字段中插入值,这是不寻常的,当然脚本不再正常工作。
所以我的问题是:我有什么方法可以防止在数据库中插入4个字段的值?可以锁定为NULL吗?那些字段可以忽略“SET / UPDATE”功能吗?
答案 0 :(得分:2)
选项 :
更新 :
如果您无法访问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 ;
答案 1 :(得分: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触发器。
答案 2 :(得分: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;
这就是......
感谢您的回复!!!