$mysqli->affected_rows returnere forkert værdi

Tags:    php mysqli

Hej

Jeg sidder og skal indsætte nogle oplysninger i to tabeller ( tabel#1 og tabel#2) i en MySql database.

Jeg bruger $mysqli->affected_rows til at tjekke, hvor mange rækker der er blevet oprettet

Jeg bruger $mysqli->affected_rows to gange på i min php-fil:

Hvis resultat af if($row_count = $mysqli->affected_rows === 1) i tabel#1

så vil jeg fortsætte til tabel#2 og indsætte 3 rækker i den.

Så bruger jeg igen $mysqli->affected_rows men denne gang skriver jeg:

if($row_count = $mysqli->affected_rows === 3) for at undersøge om den indsatte 3 rækker.

Det er så her det hele bliver en smule mærkeligt, for der bliver indsat 3 rækker i tabel#2, men if($row_count = $mysqli->affected_rows === 3) returnere kun 1

Så er det jeg gerne vil vide om jeg kun kan bruge: $mysqli->affected_rows èn gang i hver php-fil ?





7 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato

Så er det jeg gerne vil vide om jeg kun kan bruge: $mysqli->affected_rows èn gang i hver php-fil ?

du kan sagtens anvende den flere gange, jeg tror snarre du har en fejl i din coder
kan du ikke vise den code du anvender ??




Hej

Her er koden, som giver kvaler:

Fold kodeboks ind/udPHP kode 


Koden fejler ved linje 81, da if($row_count = $objcon->affected_rows === 3){ returnere 1, skønt der er blevet indsat 3 rækker (det har jeg tjekket)

Dokumentation omkring $mysqli->affected_rows



Indlæg senest redigeret d. 26.03.2015 09:24 af Bruger #16670
Hvis der blev berørt 3 rækker:

Fold kodeboks ind/udPHP kode 


Måske du burde..

$row_count = $mysqli->affected_rows ;
if( $row_count === 3)




Indlæg senest redigeret d. 26.03.2015 11:06 af Bruger #955
@Stefan

Det hjalp ikke !

resultatet er desværre det samme :(

jeg har også prøvet at kalde den ene $variabel for:

$row_count

og den anden for

$row_count_x

Så jeg derved sikre mig at $row_count ikke overskriver $row_count _x

Men resultatet er stadigvæk det samme...







Linje 81,
Fold kodeboks ind/udPHP kode 
, vil altid være 1 såfremt querien var succesfuld.

"Gets the number of affected rows in a previous MySQL operation"
- Eftersom du laver 3 individuelle queries, vil affected_rows ligeledes give 1- 3 gange.


I stedet kan du indsætte en tæller, som bliver increased med én, hver gang en query er succesfuld.

Jeg bemærkede også, at du I toppen tjekkede om blot en af tingene var tomme, eller hog_properties var lig 3. Alle felter skal vel være sat og udfyldt samt hog_properties = 3.

Jeg har skrevet et eksempel på, hvordan jeg ville gøre det. Bemærk, at koden ikke er testet, og det kan godt være, at jeg har misset en ting eller to hist og pist. Du kan lige få mit eksempel herunder:

Fold kodeboks ind/udPHP kode 





@Nikolaj

Takker for din hjælp - jeg vil kigge på din kode og om jeg kan finde ud af at lave noget tilsvarende.

Omkring det du skriver om at $mysqli->affected_row vil være 1 er jeg lidt uforstående overfor, da det var mit indtryk at den godt kunne tælle antallet af nye rows uden jeg selv skal til at lave en tæller !

$mysqli->affected_rows

Der var så vidt jeg lige umiddelbart kunne se, ingen tæller brugt i eksemplerne på php.net, så den løsning havde jeg slet ikke skænket en tanke.





Indlæg senest redigeret d. 26.03.2015 15:11 af Bruger #16670
Hej Henrik,

Super.

Og ja, affected_rows tæller bestemt også antallet af nye rows. Dit problem ligger i, at du ikke indsætter 3 nye rækker i en query, men en ny række i 3 forskellige queries.

Du linker selv til php.net, så tag et kig i description:
"Returns the number of rows affected by the last INSERT, UPDATE, REPLACE or DELETE query."

Eftersom du kører 3 queries, som hver især indsætter 1 ny række, vil affected_rows kun returnere 1, da du i den sidste query du køre, kun indsætter en række.

Alternativet er, at du omskriver din kode således de 3 rækker i attributes tabellen bliver indsat i én query.

Jeg ved faktisk ikke, om det giver netop det du ønsker, hvis du sætter prepare-statementet før selve foreach loopet. Det vil jeg faktisk anbefale dig at gøre [edit: under alle omstændigheder].

Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 26.03.2015 15:39 af Bruger #16122
t