webForumDet fria alternativet

Hämta endast en rad ur databas

PHPur PHP

9 svar · 651 visningar · startad av nitro2k01

Medlem sedan aug. 20039 340 inlägg
Frågan#1

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?

Medlem sedan juni 200032 967 inlägg
#2

Är det inte LIMIT i SQL-frågan du tänker på?

Medlem sedan aug. 20039 340 inlägg
#3

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.

Medlem sedan jan. 200548 inlägg
#4

Är det mysql_result() du syftar på?

Medlem sedan aug. 20039 340 inlägg
#5

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?

Medlem sedan dec. 1999286 inlägg
#6

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);
?>
Medlem sedan jan. 200548 inlägg
#7

Såg inte att det stod "ett alternativ till mysql_query" ;)

Medlem sedan mars 20025 907 inlägg
#8

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?

Medlem sedan mars 20034 471 inlägg
#9

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
Medlem sedan jan. 2002341 inlägg
#10

Jag har inte testat det själv, men STORED PROCEDURES kanske kan vara ett alternativ?

137 ms totalt · 3 externa anrop · v20260731065814-full.232057fb
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)