stevenetMedlem sedan juni 20001 251 inlägg http://pastebin.com/562486
<?
//besökarens uid
$idCookie= $_SESSION[ID];
//hex #000000
$lankfarg=strip_tags($lankfarg);
$lankfarg=substr($lankfarg, 0, 7);
$lankfarg=mysql_real_escape_string($lankfarg);
//hex #000000
$bgfarg=strip_tags($bgfarg);
$bgfarg=substr($bgfarg, 0, 7);
$bgfarg=mysql_real_escape_string($bgfarg);
//html, sträng
$namn=mysql_real_escape_string($rte1);
mysql_query("UPDATE community_presentation SET info='$namn', bgfarg='$bgfarg', lankfarg='$lankfarg' WHERE id='$idCookie' limit 1");
?>
Vi ett tillfälle har användare lyckats skriva över alla poster i tabellen. Borde inte detta förhindras av limit 1?
@ndersMedlem sedan juni 200032 969 inlägg Under förutsättning att värdet $idcookie är fint och rätt och bra så bör ju inte SQL-frågan kunna uppdatera andra poster.
Men menar du att du har fler poster med samma id i tabellen?
cyprysMedlem sedan dec. 20003 563 inlägg Var tvungen att kolla om LIMIT verkligen fungerade så och det ska stämma. Limit 1 i slutet på en UPDATE ska bara uppdatera en post och därefter avsluta, enl dokumenatationen (MySQL 5.1).
Vilken version kör du och är du verkligen säker på att just denna kod körts en (1) gång och raderat samtliga poster?
@ndersMedlem sedan juni 200032 969 inlägg Utan att veta helt hur LIMIT fungerar så tycker jag det känns smått livsfarligt att inte ha med någon ORDER BY. Hur vet du annars vilken post du uppdaterar?
stevenetMedlem sedan juni 20001 251 inlägg ID är unikt. Endast en post ska uppdateras. MySQL 4.1.9.
"UPDATE returns the number of rows that were actually changed. In MySQL 3.22 or later, the mysql_info() C API function returns the number of rows that were matched and updated and the number of warnings that occurred during the UPDATE.
Starting from MySQL 3.23, you can use LIMIT row_count to restrict the scope of the UPDATE. A LIMIT clause works as follows:
Before MySQL 4.0.13, LIMIT is a rows-affected restriction. The statement stops as soon as it has changed row_count rows that satisfy the WHERE clause.
From 4.0.13 on, LIMIT is a rows-matched restriction. The statement stops as soon as it has found row_count rows that satisfy the WHERE clause, whether or not they actually were changed. "
http://dev.mysql.com/doc/refman/4.1/en/update.html
Låt oss säga att idCookie gick att manipulera, skulle man då på något sätt kunna gå förbi LIMIT 1?
@ndersMedlem sedan juni 200032 969 inlägg Om ID är unikt i tabellen kan UPDATE-frågan bara uppdatera en post, oberoende av LIMIT.
stevenetMedlem sedan juni 20001 251 inlägg Nu händer det grejer här. Felet inträffade igen. Alla poster ersattes, det blev dessutom något slags fel på tabellen, och enskilda poster gick inte hämta ut. Det fungerarade inte med REPAIR på tabellen.
#1030 - Got error 127 from storage engine