Ja, jeg har faktisk forsøgt at finde svaret på det her på Google, men jeg har åbenbart overvurderet mine evner til at søge, idet jeg ikke kan finde det jeg leder efter.
Jeg skal bruge den samlede sum af antal uploads for en bestemt bruger. Jeg ved godt at num_rows udgår, og at jeg bør skifte til iMySQL, hvilket jeg lige er i gang med at lære.
Anyway. Jeg kunne godt tænke mig at få følgende kode (og 4 forespørgseler), kortet ned til kun én forespørgsel.
//Videoer $result1 = mysql_query("SELECT * FROM videoer WHERE medlems_id = '".$_GET['mid']."'"); $num_rows1 = mysql_num_rows($result1); //Billeder $result2 = mysql_query("SELECT * FROM billeder WHERE medlems_id = '".$_GET['mid']."'"); $num_rows2 = mysql_num_rows($result2); //Spil $result3 = mysql_query("SELECT * FROM spil WHERE medlems_id = '".$_GET['mid']."'"); $num_rows3 = mysql_num_rows($result3); //Artikler $result4 = mysql_query("SELECT * FROM artikler WHERE medlems_id = '".$_GET['mid']."'"); $num_rows4 = mysql_num_rows($result4);
$sql = "SELECT SUM(n) FROM(" . "SELECT COUNT(*) AS n FROM videoer WHERE medlems_id = '" . $_GET['mid'] . "'" . " UNION ALL " . " SELECT COUNT(*) AS n FROM billeder WHERE medlems_id = '" . $_GET['mid'] . "'" . " UNION ALL " . " SELECT COUNT(*) AS n FROM spil WHERE medlems_id = '" . $_GET['mid'] . "'" . " UNION ALL " . " SELECT COUNT(*) AS n FROM atikler WHERE medlems_id = '" . $_GET['mid'] . "'" . ") x"; $res = mysql_query($sql); $sum = mysql_result($res, 0, 0);
FANTASTISK arne_v !! Ja, men hvis jeg nu skifter til MySQLi så er den mere sikker - ikke?
I så fald, hvordan kan overstående kode skrives i MySQLi? Hvis såfremt du vil hjælpe mig, jeg vil jo gerne lave den sikreste og bedste kode, som ikke udgår lige foreløbig.
Jeg har en masse at foretage mig, idet at jeg har et stort CMS i alm. MySQL, som skal skiftes over til MySQLi. Pyyh :)
Mange tak indtil videre, jeg vil dog værdsætte hvis du også kunne forklare koden i MySQLi.
$sql = "SELECT SUM(n) FROM(" . "SELECT COUNT(*) AS n FROM videoer WHERE medlems_id = ?" . " UNION ALL " . " SELECT COUNT(*) AS n FROM billeder WHERE medlems_id = ?" . " UNION ALL " . " SELECT COUNT(*) AS n FROM spil WHERE medlems_id = ?" . " UNION ALL " . " SELECT COUNT(*) AS n FROM atikler WHERE medlems_id = ?" . ") x"; $stmt = mysqli_prepare($sql); mysqli_stmt_bind_param($stmt, "iiii", $_GET['mid'], $_GET['mid'], $_GET['mid'], $_GET['mid']); $res = mysqli_stmt_get_result($stmt); $data = mysqli_fetch_all($res); $sum = $data[0][0];
En lille præcisering: Det er ikke mere sikkert at skifte til mysqli (og tilsvarende), hvis du fortsætter med at indsætte værdier med streng-sammensætning
"SELECT ... " . $_GET['mid'] . " ... "
Det er kun mere sikkert, hvis du gør som i #4 og indsætter værdierne med mysqli_stmt_bind_param (og tilsvarende).
Og så er det ikke kun SQL-injection du skal tænke på i forbindelse med sikkerhed i databaser - det er bare så trivielt nemt at undgå.
Synes godt om
Ny brugerNybegynder
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.