Я использую следующий код PHP для создания триггера, но всегда получаю ошибку, пожалуйста, помогите мне разрешить ее - PullRequest
2 голосов
/ 30 марта 2010

Я использую следующий код PHP для создания триггера, но всегда получаю сообщение об ошибке, пожалуйста, помогите мне разрешить его.

$link = mysql_connect('localhost','root','rainserver');
    mysql_select_db('information_schema');
                echo $trgquery = "DELIMITER $$ DROP TRIGGER `update_data` $$ CREATE TRIGGER `update_data` AFTER UPDATE on `jos_menu` FOR EACH ROW BEGIN
IF (NEW.menutype != OLD.menutype) THEN
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.menutype, newvalue = NEW.menutype, field = 'menutype';
END IF;
IF (NEW.name != OLD.name) THEN
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.name,

newvalue = NEW.name, field = 'name';
END IF;
IF (NEW.alias != OLD.alias) THEN
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.alias,

newvalue = NEW.alias, field = 'alias';
END IF;
END$$ DELIMITER ;";
                echo "<br>";
        //$trig = mysqli_query($link,$trgquery) or die("Error Exist".mysqli_error($link));
         $trig = mysql_query($trgquery) or die("Error Exist".mysql_error());

Я получаю ошибку как:

Error ExistYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$$ DROP TRIGGER `update_data` $$ CREATE TRIGGER `update_data` AFTER UPDATE on `j' at line 1

Пожалуйста, помогите мне создать мой триггер ...

1 Ответ

1 голос
/ 30 марта 2010

Ошибка говорит вам, что именно не так. DELIMITER $$ DROP ... не является действительным утверждением. Отчасти это объясняется delimiter командой MySQL, а не оператором. Другая причина заключается в том, что «$$» в «DELIMITER $$» является частью команды и поэтому не завершает команду. Вам все еще нужно включить старый разделитель.

Согласно документации, mysql_query не поддерживает несколько операторов, поэтому вам придется создавать отдельные запросы для каждого из них. Еще лучше переключиться на более новый драйвер mysqli, чья функция multi_query работает для нескольких операторов в одном запросе. mysqli также поддерживает подготовленные операторы, что не имеет большого значения в вашем примере, но имеет значение в большинстве других ситуаций. PDO еще новее и также поддерживает подготовленные операторы , и я считаю, что драйвер PDO MySQL поддерживает множественные запросы.

В качестве альтернативы триггерам двоичное ведение журнала на основе строк будет записывать изменения, внесенные в таблицы в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...