Błąd 23000 podczas dodawania wiersza do bazy danych

0

Może mi ktoś pomoże .
W programie PHP używam PDO

Ma dwie instrukcje wpisujące dane do bazy.

 $mySQL = 'INSERT INTO `KsefSprzedaz`(  `Sts`, `TypFakt`, `NrFakt`,'.
   ' `Data`, `DtRejestr`, `Wal`, `NIP`, `Klient`, `faktXML` ) ' .
   ' VALUES (  0 , :TypFakt, :NrFakt  ,'.   
   ' "'.$json->Fakt->Fa->P_1.'" , "'.$json->Fakt->Fa->P_6.'" , :Wal , :NIP , :Klient , :xml ) ';

ZapiszLog ( 'Wpisano : '.$mySQL ) ;   

$stms = $pdo->prepare ( $mySQL );
$stms->bindParam(':xml'     , $Wyn->XML ,PDO::PARAM_STR );
$stms->bindParam(':TypFakt' , $json->Fakt->Fa->RodzajFaktury ,PDO::PARAM_STR );
$stms->bindParam(':NrFakt'  , $json->Fakt->Fa->P_2 ,PDO::PARAM_STR );
$stms->bindParam(':Wal'     , $json->Fakt->Fa->KodWaluty  ,PDO::PARAM_STR );
$stms->bindParam(':NIP'     , $json->Fakt->Podmiot2->DaneIdentyfikacyjne->NIP    ,PDO::PARAM_STR );
$stms->bindParam(':Klient'  , $json->Fakt->Podmiot2->DaneIdentyfikacyjne->Nazwa  ,PDO::PARAM_STR );
$stms->execute();
$IdSend = $pdo->lastInsertId();

i zaraz potem mam drugie polecenie

$mySQL = 'INSERT INTO `KsefStsSprzedaz`( `IdKsefSprzedaz`, `dtRead`, `Sts`, `Dane`) ' .
     ' VALUES ( :Id , NOW() , :sts , :Dane ) ' ;
  $stms = $pdo->prepare ( $mySQL );
  $stms->bindValue(':Id'  , $IdSend ,PDO::PARAM_INT );
  if (  array_key_exists( 'processingCode', $ksef->Send ) ) 
        $stms->bindValue(':sts'  , $ksef->send->processingCode ,PDO::PARAM_INT );
       else 
         $stms->bindValue(':sts'  , 1  ,PDO::PARAM_INT );
  $stms->bindValue(':Dane' , json_encode ( $ksef->Send )  ,PDO::PARAM_STR );
  $stms->execute();
  ZapiszLog ( ' Execute 2b : '.$stms->errorCode() ) ;  

I w tym drugim poleceniu zawsze mam błąd 23000 .
Może któą podpowie gdzie mam szukać

Paweł

0

Co to jest sts oraz dtRead? Jakie dane są w kolumnie dane?

3

Wpisanie "php pdo error 23000" od razu daje link z rozwiązaniem. Jest nawet link do dokumentacji, z listą wszystkich błędów: https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html

Wygląda że próbujesz dodać zduplikowane klucze główne.

1

Dzięki chłopaki za zainteresowanie .... po 12 godzinach zauważyłem błąd !!!!

w tej linii tak wygląda :

$stms->bindValue(':sts'  , $ksef->send->processingCode ,PDO::PARAM_INT );

A powinno być od wielkiej litery

$stms->bindValue(':sts'  , $ksef->Send->processingCode ,PDO::PARAM_INT );

PROBLEM ROZWIĄZANY ... Hurrrrraaaaa

Paweł

1

Czeka Cie jeszcze sporo innych problemów :) ten kod nie zachęca do jego dalszego rozwoju.

1 użytkowników online, w tym zalogowanych: 0, gości: 1