Avatar billede jop... Nybegynder
01. september 2007 - 16:49 Der er 3 kommentarer og
1 løsning

Problem med mysql_affected_rows

Jeg kan ikke få affected rows til at give udslag.

Nogen der kan se en fejl?

include("includes/conn.php");
            mysql_query("update individuel_rang set userid='$infoid', type='$type', nyrang='$nyrang', glrang='$glrang', spillernavn='$spillernavn', turn='$turn', nypoint='$nypoint', glpoint='$glpoint', niveau='$niveau' where id = 1") or die(mysql_error());
            $test = mysql_affected_rows();
            echo $test;
           
            if($test == 0) {       
            $insertSQL = "insert into individuel_rang (userid, type, nyrang, glrang, spillernavn, turn, nypoint, glpoint, niveau)
            values ('$infoid', '$type', '$nyrang', '$glrang', '$spillernavn', '$turn', '$nypoint', '$glpoint', '$niveau')";
mysql_query($insertSQL) or die(mysql_error());
}

-----------------------
Der er en række i databasen med id=1 - Så det er ikke der fejlen ligger.
Avatar billede arne_v Ekspert
01. september 2007 - 17:11 #1
Den udskriver 0 selvom der er en række ?
Avatar billede jop... Nybegynder
01. september 2007 - 17:13 #2
Ja, nemli. Så istedet for at opdatere den række på id=1 laver den en helt ny række  :o/
Avatar billede jop... Nybegynder
01. september 2007 - 17:24 #3
Jeg kan godt en sjælden gang få den til atudskrive 1, men jeg har ikke helt fundet logikken i det. Måske er det når jeg går ind på den første gang. opdaterer jeg siden går den direkte på nul igen  :-/
Avatar billede jop... Nybegynder
01. september 2007 - 17:39 #4
Jeg fandt dette i php-manualen. Det løser problemerne  :-)

"Note: When using UPDATE, MySQL will not update columns where the new value is the same as the old value.  This creates the possiblity that mysql_affected_rows() may not actually equal the number of rows matched, only the number of rows that were literally affected by the query."

As of PHP 4.3.0 (I assume, I only tried with 4.3.2), you can make mysql_affected_rows() return the number of rows matched, even if none are updated.

You do this by setting the CLIENT_FOUND_ROWS flag in mysql_connect(). For some reason, not all the flags are defined in PHP, but you can use the decimal equivalent, which for CLIENT_FOUND_ROWS is 2.

So, for example:

$db= mysql_connect("localhost", "user", "pass", false, 2);
mysql_select_db("mydb", $db);

$query= "UPDATE ...";
mysql_query($query);
print mysql_affected_rows(); // more than 0
mysql_query($query); // same query twice
print mysql_affected_rows(); // still more than 0
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester