注意
虽然这个解决方案在MySQL上运行良好,但是OP使用的MariaDB似乎并不喜欢它。
你应该可以把
CREATE TRIGGER
变成一个疑问。在我的情况下我用
$link
$link = new PDO("mysql:host=$server;dbname=$db;charset=utf8", $user, $pass, $options);
)作为我的连接。我正在运行PHP7和MySQL5.6:
$link->exec("DROP TRIGGER IF EXISTS before_update_typesoumission");
$link->exec("CREATE TRIGGER before_update_typesoumission
BEFORE UPDATE
ON typesoumission
FOR EACH ROW
IF NEW.typeSoumission = 'Résidentiel'
THEN
SET NEW.ratio = 1;
ELSE
SET NEW.ratio =
NEW.tauxHoraire / (SELECT tauxHoraire
FROM typesoumission
WHERE typeSoumission = 'Résidentiel');
END IF;");
$result = $link->query("SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME='before_update_typesoumission'");
print_r($result->fetch());
Array
(
[TRIGGER_CATALOG] => def
[TRIGGER_SCHEMA] => test
[TRIGGER_NAME] => before_update_typesoumission
[EVENT_MANIPULATION] => UPDATE
[EVENT_OBJECT_CATALOG] => def
[EVENT_OBJECT_SCHEMA] => test
[EVENT_OBJECT_TABLE] => typesoumission
[ACTION_ORDER] => 0
[ACTION_CONDITION] =>
[ACTION_STATEMENT] => IF NEW.typeSoumission = 'Résidentiel'
THEN
SET NEW.ratio = 1;
ELSE
SET NEW.ratio =
NEW.tauxHoraire / (SELECT tauxHoraire
FROM typesoumission
WHERE typeSoumission = 'Résidentiel');
END IF
[ACTION_ORIENTATION] => ROW
[ACTION_TIMING] => BEFORE
[ACTION_REFERENCE_OLD_TABLE] =>
[ACTION_REFERENCE_NEW_TABLE] =>
[ACTION_REFERENCE_OLD_ROW] => OLD
[ACTION_REFERENCE_NEW_ROW] => NEW
[CREATED] =>
[SQL_MODE] => STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[DEFINER] => test@10.1.10.0/255.255.255.0
[CHARACTER_SET_CLIENT] => utf8
[COLLATION_CONNECTION] => utf8_general_ci
[DATABASE_COLLATION] => utf8_general_ci
)