gpt4 book ai didi

php - 如何通过 PHP 表单添加 MySQL 触发器 (Prestashop 1.5.4 : installation module)

转载 作者:行者123 更新时间:2023-11-29 23:19:26 26 4
gpt4 key购买 nike

我必须制作一个动态更改简短描述 block 的模块。但是如果简短描述为空,则 Prestashop 1.5.4 中不存在此 block ,因此我想创建一个触发器来填充它(如果它为空)。

这是我的安装函数:

public function install()
{
if
(
!parent::install()
OR !$this->registerHook('displayProductStatus')
OR !$this->registerHook('displayOverrideTemplate')
) {
return FALSE;
}


$sql = array();
include(dirname(__FILE__) . '/init/install_sql.php');
foreach ($sql as $s)
{
if (!Db::getInstance()->Execute($s))
{
return FALSE;
}
}
return TRUE;
}

这是我的 install_sql.php

<?php

$sql = array();

$sql[] = "DELIMITER $$

CREATE TRIGGER add_short_description
BEFORE INSERT ON ps_product_lang
for each row begin
if (NEW.description_short is NULL OR NEW.description_short = '' ) THEN
SET NEW.description_short = '.';
END IF;
END$$

DELIMITER ;";

如果我将其直接添加到 PHPMyAdmin 中,此触发器功能非常好,但当我通过模块安装时安装失败。我认为这是分隔符的错误,但是......我不知道如何避免这种情况。

我需要修改什么?

(抱歉我的英语不好,我希望它至少是可以理解的)

最佳答案

1) DELIMITER 只是一个 mysql 客户端工具命令,不是 SQL 的一部分。因此您不应该包含它。

2)现在您可以“单行”转动扳机

CREATE TRIGGER add_short_description
BEFORE INSERT ON ps_product_lang
FOR EACH ROW
SET NEW.description_short = COALESCE(NULLIF(NEW.description_short, ''), '.')

这是一个 SQLFiddle 演示

3) 我对 Prestashop 没有足够的了解,但添加触发器作为模块的一部分可能是一个非常糟糕的主意,因为它可能很容易引入副作用,尤其是在 ps_product_lang 的情况下是通用模式的一部分。如果某些第三方模块开始在我的数据库中创建触发器,我个人会非常生气。

关于php - 如何通过 PHP 表单添加 MySQL 触发器 (Prestashop 1.5.4 : installation module),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com