21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
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
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.
Kajman
Profil
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?

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:

0