Autor Zpráva
Darth-Cz-
Profil *
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
A ta chyba je? A ten PHP kód vypadá?
Darth-Cz-
Profil *
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 *
To Darth-Cz-

Já si teda nejsem jistý, ale nemyslíš náhodou poddotazy? Viz Linuxsoft
Darth-Cz-
Profil *
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
Darth-Cz-:
Potřebuji id právě vkládaného.
tohle nepomůže?
SELECT LAST_INSERT_ID();
Darth-Cz-
Profil *
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 *
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
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
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 *
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
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 *
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: