小编Ale*_*lov的帖子

当列名是动态的时,如何从触发器更新表?

测试数据库的模式和数据 - https://gist.github.com/koceg/435c0d2b1246a69d048f

我的目标是更新表,当有人插入的新行objects_properties表.列更新的名称是动态的-它取决于PROPERTY_IDobjects_properties.

到目前为止,我已经创建了一个触发器和一个存储过程,但是我收到了这个错误:

存储函数或触发器中不允许动态sql.

我做错了还是mysql不允许在触发器中使用预准备语句调用存储过程?如果是这样,我该怎么办?

我有一个想法,但即使在伪代码中它也很难看.真正的SQL会更糟糕,因为会有几十个代码:

SWITCH (property_code)
    CASE 'name'
        INSERT INTO boards (id, name) VALUES (@object_id, @value) ON DUPLICATE KEY UPDATE name = @value;

    CASE 'address'
        INSERT INTO boards (id, address) VALUES (@object_id, @value) ON DUPLICATE KEY UPDATE address = @value;

    CASE 'district'
        INSERT INTO boards (id, district) VALUES (@object_id, @value) ON DUPLICATE KEY UPDATE district = @value;
Run Code Online (Sandbox Code Playgroud)

PS我无法将此逻辑移动到我的应用程序,因为该数据库被多个应用程序使用.

mysql sql

5
推荐指数
1
解决办法
633
查看次数

为什么特定网站上的HTTP/2在FF中工作,但在同一台Windows 10计算机上的Chrome,IE和Edge中不起作用?

我有一个站点,在Ubuntu 16.04服务器(OpenSSL 1.0.2h)上的Nginx 1.10.0上运行.我想通过HTTP/2服务这个站点,所以我相应地配置了Nginx:

listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server
Run Code Online (Sandbox Code Playgroud)

它在我的办公室Ubuntu 15.10桌面上的FF 47和Chrome 51以及我家Ubuntu 15.10桌面上的相同浏览器中都能正常工作.

但是在我的家中,Windows 10台式机和笔记本电脑HTTP/2仅适用于FF.Chrome 51,IE 11和Edge在此网站上使用HTTP/1.1.

所以,我很困惑.这项服务表示,我的网站支持HTTP/2和ALPN(从版本51开始,HTTP/2需要在Chrome中运行).

Chrome版本和功能完全相同:

Chrome网络信息

HTTPS工作,Chrome开发工具中的安全面板显示,一切都是安全的.

Chrome,IE和Edge中的此演示在FF中显示消息" 此浏览器未启用HTTP/2. "和" 您的浏览器支持HTTP/2! ".但是在所有这些浏览器中,medium.com上的HTTP/2都可以正常工作.

所以,我的问题是:发生了什么以及如何解决这个问题?

browser windows https http nginx

4
推荐指数
1
解决办法
1018
查看次数

标签 统计

browser ×1

http ×1

https ×1

mysql ×1

nginx ×1

sql ×1

windows ×1