Autor | Zpráva | ||
---|---|---|---|
Pavel Calta Profil |
Dobrý den,
opravdu, opravdu jsem pátral a zkoušel, zda nemám někde chybu a nemohu na nic přijít. Mám následující: $Trial = new Obecne_fce(); $Data=$Trial->queryAll("SELECT * from _new_moduly_rel where Id_TypStranky = 1"); $Trial2 = new Obecne_fce(); for ($i=0; $i < 1; $i++) { $DataPole = array( ":Id_TypModulu" => $Data[$i]['Id_TypModulu'], ":Poradi" => $Data[$i]['Poradi'], ":Aktivni" => $Data[$i]['Aktivni'] ); $Trial2->InsertData("Insert into _new_moduly_rel(Id,Id_TypStranky,Id_TypModulu,Poradi,Aktivni) values (0, 2, :Id_TypModulu,:Poradi,:Aktivni)",$DataPole); } Následně: function InsertData($query,$param=Array()) { $navrat = $this->spojeni->prepare($query); $navrat->execute($param); $navrat->debugDumpParams(); } function __construct(){ $options=array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ); $this->spojeni= @new PDO("mysql:host=$host;dbname=$name",$user,$pass,$options); a výsledek je, že se provede insert, ale v tabulce nepřibude jeden, ale hned 4 záznamy. Prosím, co už dělám špatně? Funkce InsertData a ten konstruktor patří třída Obecne_fce() samozřejmě. Nekopíroval jsem to celé pro přehlednost. Stejně tak jsem nekopíroval loginy do DB. |
||
Kajman Profil |
#2 · Zasláno: 15. 3. 2018, 14:44:20
Zkuste si vrátit id vkládaného záznamu a počet ovlivněných řádků. Ty si pro ladící potřeby vypsat.
Je možné, že vkládáte jeden řádek, ale skript je spuštěn 4x? |
||
Pavel Calta Profil |
Mě to přijde jako chyba někde ovladačích DBO, nebo netuším.
Zkoušel jsem i do té funkce InsertData si vložit jednoduše echo "zapisuji data"; a toto se vypíše jen jednou. Vypsat Id záznamu, máte na mysli ->lastInsertId(); ? Pokud ano, tak pak mám funkci takto: function InsertData($query,$param=Array()) { $navrat = $this->spojeni->prepare($query); $navrat->execute($param); echo $this->spojeni->lastInsertId(); echo "<br>"; } Vypíše pouze jedno Id a to je to poslední. Poslední, ale před ním jsou již vložené 3 identické záznamy. Tak přidal jsem ještě echo $navrat->rowCount();
A to vypíše 1. Tak fakt nevím, co dělám zle. Tak: začínám z toho mít pocit nějakých nekompatibilit verzí ovladačů, nebo nevím. Takže: Moje prostředí je: PHP Version 7.0.27-0+deb9u1 připojuji s MYSQL u mého hostingu, zde je PHP: 7.1.15 A dělá to tuto chybu. Dále jsem zkusil druhou instalaci, kde mám PHP Version 5.6.30-0+deb8u1 zde to funguje korektně, zapíše se pouze jeden záznam. Na hostingu mám ale PHP Version 5.5.38 a zde se to zapisuje špatně. Je možné, že je to tímto? Tak ještě jeden posun, vidím, že se nevloží vždy 4, ale náhodně, někdy pouze 2, někdy 3, někdy hned 5 identitických záznamů. Fakt tedy nemám tušení,. Verze PHP na hostingu, kde běží PHPmyadmin PHP: 7.1.15 s tím samozřejmě nemá co dělat, PDO se připojuje přímo k DB. |
||
Časová prodleva: 4 dny
|
|||
Kajman Profil |
#4 · Zasláno: 19. 3. 2018, 08:52:04
Když za insertem zavoláte die, tak se vloží jen jeden řádek? V logu apache není vidět více volání toho skriptu (třeba z cronu)?
Můžete si logovat spouštění toho insertu např. do souboru? Např. mikrosekundy spuštění + getmypid + debug_backtrace? |
||
Časová prodleva: 4 roky
|
0