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.
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 :-/
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