Är det inte LIMIT i SQL-frågan du tänker på?
Jag har tidigare sett en PHP-funktion för att enbart hämta en rad (Av säkerhetsskäl) ur en MySQL-databas. Vad heter den funktionen?
9 svar · 651 visningar · startad av nitro2k01
Jag har tidigare sett en PHP-funktion för att enbart hämta en rad (Av säkerhetsskäl) ur en MySQL-databas. Vad heter den funktionen?
Är det inte LIMIT i SQL-frågan du tänker på?
Nej, utan ett alternativ till mysql_query som jag minns det, som inte tillåter modifiering, utan bara returnerar exakt en rad. Detta skulle då vara ett superskydd mot SQL-injektioner.
Jag är väl medveten om andra metoder för att förhindra detta, men jag vill ändå gärna få reda på denna funktion.
Är det mysql_result() du syftar på?
Nej, denna metod ger ju inte något som helst skydd mot injektioner. (Eftersom den utförs efter mysql_query) Eller så kommer jag helt enkelt ihåg fel?
flexish skrev:
Är det mysql_result() du syftar på?
Det är väl lite svårt att använda den funktionen om man inte redan har ställt en databasfråga. ;) Ur php-manualen för mysql_result():
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$result = mysql_query('SELECT name FROM work.employee');
if (!$result) {
die('Could not query:' . mysql_error());
}
echo mysql_result($result, 2); // outputs third employee's name
mysql_close($link);
?>
Såg inte att det stod "ett alternativ till mysql_query" ;)
Jag har aldrig hört talas om någon sådan inbyggd funktion. Däremot så brukar det finnas i diverse script. Bl.a. har vBulletin en funktion som de kallar för query_first() som är en kombination av mysql_query och mysql_fetch_array. Det är inget sådant du har sett?
I mitt inloggningsskript kollar jag att jag hittar bara en användare (där relevant) mha
if (mysql_num_rows($res) == 1) {
//do_whatever();
}
else exit(); //Eller någon annan felhantering
Om det här gäller uppdatering/delete borde du väl kunna lösa det genom att först göra en SELECT med de WHERE-värden du vill använda, och om den bara returnerar 1 rad, så kör du updaten? Alltså något i stil med:
$sqlTst = "SELECT * FROM Tabell WHERE ".$_POST["where"];
$resTst = mysql_query($sqlTst) or die();
if (mysql_num_rows($resTst) == 1) {
$sql = "< update/delete med WHERE $_POST['where'] >";
$resTst = mysql_query($sql) or die(); // Gäller bara en rad
}
else exit(); //Eller någon annan felhantering
Jag har inte testat det själv, men STORED PROCEDURES kanske kan vara ett alternativ?