Autor | Zpráva | ||
---|---|---|---|
Darth-Cz- Profil * |
#1 · Zasláno: 10. 11. 2009, 18:37:25
Dobrý den,
chtěl bych Vás poprosit o pomoc s následující konstrukcí: zde na fóru jsem objevil kód INSERT INTO `moje_tabulka` (nazev,popis) SELECT CONCAT(`AUTO_INCREMENT`,'$nazev_souboru'), '$popis' FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`='moje_databaze' AND TABLE_NAME = 'moje_tabulka' Chtěl bych toto provést v mysql_query - bohužel mi to vyhodí chybu v syntaxi. Nevíte, jak spojit tyto dva příkazy, aby to šlo? Předem děkuji za odpověď |
||
Aichi Profil |
#2 · Zasláno: 10. 11. 2009, 19:12:22
A ta chyba je? A ten PHP kód vypadá?
|
||
Darth-Cz- Profil * |
#3 · Zasláno: 10. 11. 2009, 19:57:34
mysql_query("Insert into tabulka (bunka, bunka1) values ('retezec', 'retezec1') Select `AUTO_INCREMENT` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`='moje_databaze' AND TABLE_NAME = 'moje_tabulka'"); chyba je taková ta klasická - you have an error in your syntax at line 1 Odděleně příkazy fungují, jde tedy o to, jak spojit ty dva příkazy dohromady v jednom query a jak získat výsledek toho selectu. Za odpověď děkuji |
||
Nick Profil * |
#4 · Zasláno: 10. 11. 2009, 20:34:13
|
||
Darth-Cz- Profil * |
#5 · Zasláno: 10. 11. 2009, 23:41:21
Nick:
Nene, já nechci vkládat jeden příkaz do druhého, potřebuji je provést hned za sebou, abych zjistil id s auto_increment aktuálně vložených dat. Pokud je provedu v oddělených mysql_query, dostanu už id o jednu vyšší. Potřebuji id právě vkládaného. |
||
nightfish Profil |
#6 · Zasláno: 11. 11. 2009, 07:30:20
Darth-Cz-:
„Potřebuji id právě vkládaného.“ tohle nepomůže? SELECT LAST_INSERT_ID(); |
||
Darth-Cz- Profil * |
#7 · Zasláno: 11. 11. 2009, 10:00:48
nightfish:
Pomohlo by, pokud bych to opět mohl provést v jednom mysql_query a jsme opět u řetězení příkazů. Pokud tedy provedu 2 mysql_query, tak mezi jejich provedením může již v databázi přibýt další záznam a měl bych tudíž špatné id :( |
||
sedgar Profil * |
#8 · Zasláno: 11. 11. 2009, 11:06:56
len tipnem - Nemala by byť bodkočiarka medzi dotazmi? tj:
mysql_query("Insert into tabulka (bunka, bunka1) values ('retezec', 'retezec1'); Select `AUTO_INCREMENT` from ........ |
||
nightfish Profil |
#9 · Zasláno: 11. 11. 2009, 11:08:57
Darth-Cz-:
„Pokud tedy provedu 2 mysql_query, tak mezi jejich provedením může již v databázi přibýt další záznam a měl bych tudíž špatné id“ last_insert_id() je uchovává pro každé připojení/klienta zvlášť (podle dokumentace) otázkou tedy je, jestli PHP v určitých situacích (persistentní spojení atd.) dokáže přidělit stejné spojení (z pohledu mySQL) dvěma různým současně běžícím skriptům/instancím skriptů jestli ne, tak není třeba problém řešit |
||
nightfish Profil |
#10 · Zasláno: 11. 11. 2009, 11:12:16
sedgar:
„Nemala by byť bodkočiarka medzi dotazmi?“ mysql_query nepodporuje vícenásobné dotazy (tedy více dotazů oddělených středníkem) podle dokumentace však jde toto chování ovlivnit |
||
Nick Profil * |
#11 · Zasláno: 11. 11. 2009, 14:20:24
Darth-Cz-:
No .. a co takhle: insert into tabulka (col) values('val'); select id from tabulka order by id desc limit 0,1; přičemž id je tu ta auto_incrementovaná proměnná =). Chybí mi tam hodně těch fešných uvozovek, ale mysql se s tím poprala. Celý ten dotaz v pohodě "narveš" do jednoho mysql_query =). |
||
nightfish Profil |
#12 · Zasláno: 11. 11. 2009, 14:31:25
Nick:
jak jsem již napsal výše, mysql_query nepodporuje více dotazů najednou navíc tvůj kód zavání nepěknou race condition - co když se mezi provádění prvního a druhého dotazu vmáčkne jiný insert? (ano, to se opravdu může stát) |
||
Nick Profil * |
#13 · Zasláno: 11. 11. 2009, 14:44:19
nightfish:
„mysql_query nepodporuje více dotazů najednou“ Nepodporuje? Tak to se omlouvám. „co když se mezi provádění prvního a druhého dotazu vmáčkne jiný insert?“ To je taky pravda .. budu o tom meditovat =) |
||
Darth-Cz- Profil * |
#14 · Zasláno: 11. 11. 2009, 17:29:33
Děkuji všem za reakce.
nightfish: Použiji tedy last_insert_id() . O přidělování každému klientu zvlášť jsem nevěděl. Díky za tip. |
||
Časová prodleva: 14 let
|
0