I currently have this code but it gives me the error mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, string given on line 22
The code is this:
JavaScript
x
1 $servername = "localhost";
2 $user = "root";
3 $pass = "";
4 $db = "mafioso";
5
6 $con = mysqli_connect($servername, $user, $pass, $db);
7
8 $cash_utbetaling[0] = 50000000;
9 $cash_utbetaling[1] = 40000000;
10 $cash_utbetaling[2] = 30000000;
11 $cash_utbetaling[3] = 20000000;
12 $cash_utbetaling[4] = 10000000;
13
14 $kuler_utbetaling[0] = 25;
15 $kuler_utbetaling[1] = 20;
16 $kuler_utbetaling[2] = 15;
17 $kuler_utbetaling[3] = 10;
18 $kuler_utbetaling[4] = 5;
19
20 $i = 0;
21 $result = mysqli_query($con, "SELECT * FROM daily_exp ORDER BY exp DESC LIMIT 5");
22 while($row_best = mysqli_fetch_assoc($result)) {
23
24 $acc_id = $row_best['acc_id'];
25
26 $sql = "SELECT * FROM accounts WHERE ID='".$acc_id."'";
27 $query = mysqli_query($con, $sql) or die (mysqli_error());
28 $row_top5 = mysqli_fetch_assoc($query);
29
30 $result = "UPDATE accounts SET money = (money + ".$cash_utbetaling[$i]."),
bullets = (bullets + ".$kuler_utbetaling[$i].") WHERE ID = ".$acc_id."";
31 mysqli_query($con, $result) or die("Bad query: $result");
32
33 $i++;
34 }
I can’t seem to find the error, I am running the same code in another file and there is no issues.
Advertisement
Answer
You are overwritting $result
JavaScript
// This is supposed to be
// a mysqli_result object ----------v-----v
while($row_best = mysqli_fetch_assoc($result))
{
// some code
// $result is now a string. Next iteration will raises the warning
$result = "UPDATE accounts SET ...";
}
So you need to give your variables distinct names. Naming a query $result
is not the best choice.
Side note.
Your inner queries are vulnerable to SQL injections. One should use prepared statements instead of concatening strings.
In example :
JavaScript
// prepare the query
$query = "SELECT * FROM accounts WHERE ID=?";
if ($stmt = mysqli_prepare($con, $query)) {
// bind the param
mysqli_stmt_bind_param($stmt, "s", $acc_id);
// execute the query
mysqli_stmt_execute($stmt);
// get the result. Of course, avoir using the same variable name, again :)
$result = mysqli_stmt_get_result($stmt);
}
For more informations about prepared statements with mysqli, read the official documentation or the tutorials written by @YourCommonSense