Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL/PHP/PDO]problem z zapisem do bazy
Forum PHP.pl > Forum > PHP
MitS
witam serdecznie.

przejdę od razu do rzeczy ...
korzystam sobie z PDO i chcąc zrobić sobie taki patent:

Kod
try{
        $sql = "INSERT INTO content(idContent, modContent, aliasContent) VALUE(:nid, :mod, :alias); INSERT INTO meta(idMeta, titleMeta, descriptionMeta, keywordsMeta) VALUE(:nid, :mtitle, :mdesc, :mkeys); INSERT INTO normalContent(idContent, dateContent, titleContent, descriptionContent) VALUE(:nid, :date, :title, :desc)";
            
        $this->_dbh->beginTransaction();        
    $stmt = null;
    $stmt = $this->_dbh->prepare($sql);    
    $stmt->bindParam(":nid", $nid, PDO::PARAM_INT, 3);
    $stmt->bindParam(":mod", $return_tab['modules_alias'], PDO::PARAM_STR, 32);
    $stmt->bindParam(":alias", $this->_createAlias(trim($_POST['title'])), PDO::PARAM_STR, 255);
    $stmt->bindParam(":mtitle", trim($_POST['mtitle']), PDO::PARAM_STR, 255);
    $stmt->bindParam(":mdesc", trim($_POST['mdescription']), PDO::PARAM_STR, 255);
    $stmt->bindParam(":mkeys", trim($_POST['mkeywords']), PDO::PARAM_STR, 255);
    $stmt->bindParam(":date", trim($_POST['date']), PDO::PARAM_STR, 20);
    $stmt->bindParam(":title", trim($_POST['title']), PDO::PARAM_STR, 255);
    $stmt->bindParam(":desc", trim($_POST['content']), PDO::PARAM_STR);        
    $stmt->closeCursor();
        $stmt->execute();
    $this->_dbh->commit();

}
catch(Exception $e){
       $return_tab['system_error'] = $e->getMessage();
}


dostaję błąd: [system_error] => SQLSTATE[HY000]: General error: 2013 Lost connection to MySQL server during query

i teraz dodam, że jeśli robię dwa inserty w transakcji to nie ma tego błędu ale jak już 3 to lipa ...
szukałem trochę po google no i znalazłem coś takiego:

http://umc.ustu.ru/mirror/php_documentatio...losecursor.html
no ale niestety sam closeCursor nie pomaga ...

próbowałem użyć tego:
Kod
<?php
/**
* @param PDOStatement $oStm
*/
public static function closeCursor($oStm) {
    do $oStm->fetchAll();
    while ($oStm->nextRowSet());
}
?>

ale nie do konca wiem ajki parametr dać jako $oStm ...

ma ktoś pomysł jak usunąć mój problem questionmark.gif?
Cezar708
1. nie wiem jakiej bazy używasz, bo jeśli MySQL to z tego co pamiętam MySQL nie obsługuje "scrollable cursors", więc ponowne umożliwienie wykonania zapytania za pomocą PDOStatement->closeCursor() nie powinno dać żadnego rezultatu.

2. Wg komunikatu, który przesłałeś to wynika, że połączenie z bazą jest utracone. Szczerze mówiąc nigdy nie próbowałem wykonywać kilka insertów za pomocą jednego "PDOStatement->execute()". Może spróbuj rozbić to na kilka pojedynczych zapytań, a dopiero potem na końcu zrób dla wszystkich zapytań "execute()", Być może PDO ma jakieś zabezpieczenie na długość wykonania pojedyńczego zapytania do bazy i być może dlatego zrywa Ci połączenia.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.