Autor | Zpráva | ||
---|---|---|---|
midlan Profil |
Ahoj,
vytvářím instalační skript pro modul do jednoho systému. Vše je v pořádku až na pokus vytvořit v databázi trigger dotazem: DELIMITER $$ CREATE TRIGGER prevent_events_doubling BEFORE INSERT ON product_events FOR EACH ROW BEGIN DECLARE is_duplicate BIT(1) DEFAULT 0; IF (NOT new.system_applied) THEN -- zde je dlouhý dotaz pro naplnění hodnoty is_duplicate IF (is_duplicate) THEN SIGNAL SQLSTATE '45013' SET MESSAGE_TEXT = 'There exists already same event for this product.'; END IF; END IF; END$$ DELIMITER ; Celý problém je v příkazu DELIMITER $$ . Databáze ho odmítá a bez změny oddělovače ten trigger prostě nejde vytvořit. Vyzkoušel jsem snad už všechny rady co jsem vygooglil a nic nezabralo. Zajímavé je, že přes phpmyadmin nebo adminer dotaz v pohodě projde, ty jsou také v PHP, takže to nějak musí jít. Ještě dodávám, že připojení do databáze je PDO mysql.
Díky za rady. |
||
Keeehi Profil |
#2 · Zasláno: 3. 3. 2015, 16:45:35
midlan:
V PHP má znak $ speciální význam takže ho musíš v určitých kontextech escapovat. Řešení - použij apostrofy pro obalení textu jako string (v nich se proměnné nenahrazují hodnotami a $ tam tedy nemá speciální význam) nebo - použiješ uvozovky a každý výskyt $ nahradíš \$
|
||
midlan Profil |
#3 · Zasláno: 4. 3. 2015, 00:38:53
Keeehi
Děkuji za upozornění, ale o tomto chování velmi dobře vím. V tom chyba není. Hlásí to přibližně toto: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$ |
||
Keeehi Profil |
#4 · Zasláno: 4. 3. 2015, 00:49:27
OK, a posíláte to na třikrát? Protože to jsou ve skutečnosti 3 příkazy.
|
||
midlan Profil |
Ano to už jsem taky zkoušel, rozdíl žádný. Zkusil jsem vše co jsem k tomuto problému vygooglil a nepomohlo nic.
Zkoušel jsem se podívat i jak to má udělaný adminer, ale nejsem z toho moudrý. |
||
Časová prodleva: 5 dní
|
|||
midlan Profil |
nikdo neví?
EDIT: tak se omlouvám za spam, právě jsem to vyřešil. Nad tím PDO připojením byly ještě nějaké třídy framoworku a metodu query ve skutečnosti předávaly na prepare . Při použití nativní PDO instance jde ten CREATE TRIGGER poslat bez použití DELIMITER metodou query tak i exec .
|
||
Časová prodleva: 10 let
|
0