mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
Ik krijg volgende foutmelding.
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/vwgcobms/domains/rubenportier.be/public_html/project-thewar/includes/functions/user.php on line 121
Ik heb echo mysql_error(); erbij staan maar die geeft niets weer.
Dat vindt ik zo raar, hier is mijn code:
Code (php)
1
2
3
4
2
3
4
<?php
$query2 = mysql_query("UPDATE counter SET value = '".$userID."' WHERE name = 'user_id'");
$row2 = mysql_fetch_assoc($query2);
?>
$query2 = mysql_query("UPDATE counter SET value = '".$userID."' WHERE name = 'user_id'");
$row2 = mysql_fetch_assoc($query2);
?>
Foutafhandeling ontbreekt.
Ja, maar wat is er dan aan mislukt? Ik snap niet wat er fout is. Die tabel bestaat.
Gewijzigd op 18/07/2010 12:15:05 door - SanThe -
Zoals? Ik snap niet fatsoenlijk? Ik heb gewoon mysql_error() erbij staan. Dat is toch het enige wat ik kan doen? Waarom zeg je dan niet meteen eens wat ik moet doen. Dit haat ik zo aan PHPHULP, iedereen wil helpen. Maar ze zeggen nooit wat nuttigs. Ze zeggen dan van je moet andere foutafhandeling zonder erbij te zeggen hoe of wat.
Daar ben ik niets mee. Want voor zover ik het goed bekijk is mijn syntax volledig juist. Dus misschien deze keer een duidelijk en goed antwoord graag? Ik snap jouw echt niet hoor SanThe Nvt, want eerst zeg je nog tegen mij verkeerde foutafhandeling en nu geef je mij een site waar ik de syntax kan bekijken. Dat is duidelijk iets helemaal anders.
mysql_error() geeft een string terug met de foutmelding. Die moet je nog zichtbaar maken met echo of (extreem, maar in het begin wel handig) die().
Ik heb onder die query en onder die fetch gezet:
Ook met die() mag het niet deugen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
require_once 'db_config.php';
$sql = "
UPDATE
werknemers
SET
salaris_schaal = 12
WHERE
voornaam = 'Tim'
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_affected_rows() == 0)
{
echo 'Geen records gewijzigd. <br />Query: '.$sql;
}
else
{
echo 'Update was succesvol!';
}
?>
require_once 'db_config.php';
$sql = "
UPDATE
werknemers
SET
salaris_schaal = 12
WHERE
voornaam = 'Tim'
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_affected_rows() == 0)
{
echo 'Geen records gewijzigd. <br />Query: '.$sql;
}
else
{
echo 'Update was succesvol!';
}
?>
Edit:
Je kan op een UPDATE query niet FETCHEN.
Je kan op een UPDATE query niet FETCHEN.
Gewijzigd op 18/07/2010 12:26:29 door - SanThe -
var_dump($query2) in plaats van fetch_assoc. Wat levert dat op? BOOL false of Resource #xxx? In dat eerste geval is het dat je query mislukt is. In het tweede geval is hij gelukt. Maar als het een UPDATE query is, dan doet mysql_fetch_assoc niet veel nuttigs. Je kan hoogstens mysql_affected_rows gebruiken om te kijken hoeveel records gewijzigd zijn.
Wacht even, volgens mij is het veel simpeler. Doe eens @SanThe: Ja dat zag ik ook. Maar dat is niet echt wat ik bedoel he. Want daar is niet echt wat gemaakt om de fout te zien. En mijn tabel wordt niet geüpdate dus tja. Daar ben ik niet veel mee.
@Jelmber: Met die var_dump krijg ik dit: bool(true)
Gewijzigd op 18/07/2010 12:29:41 door Ruben Portier
edit:
handleiding PHP.net/mysql_query:
For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.
Gewijzigd op 18/07/2010 12:31:19 door Jelmer -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// Get the lastest userID from database
$query1 = mysql_query("SELECT value FROM counter WHERE name = 'user_id'");
$row1 = mysql_fetch_assoc($query1);
// Check if query works
if(!$row1) die('Error: '.mysql_error());
// Incrise userID with 1
$userID = $row1['value'];
$userID = $userID++;
// Update userID to database
$query2 = mysql_query("UPDATE counter SET value = '".$userID."' WHERE name = 'user_id'");
$row2 = var_dump($query2);
echo mysql_error();
// Check if query works
if(!$row2) die('Error: '.mysql_error());
?>
// Get the lastest userID from database
$query1 = mysql_query("SELECT value FROM counter WHERE name = 'user_id'");
$row1 = mysql_fetch_assoc($query1);
// Check if query works
if(!$row1) die('Error: '.mysql_error());
// Incrise userID with 1
$userID = $row1['value'];
$userID = $userID++;
// Update userID to database
$query2 = mysql_query("UPDATE counter SET value = '".$userID."' WHERE name = 'user_id'");
$row2 = var_dump($query2);
echo mysql_error();
// Check if query works
if(!$row2) die('Error: '.mysql_error());
?>
Gewijzigd op 18/07/2010 12:31:43 door Ruben Portier
Doe maar eens
Uitleg: $userID++ geeft de huidige waarde van $userID terug, en telt er daarna één bij op. Maar daarna wijs jij die "huidige waarde", dus waar nog niet één bij op is geteld weer toe aan $userID. Dus blijft $userID hetzelfde.
Trouwens, dit werkt ook (en is zelfs veiliger, omdat het hiermee niet kan voorkomen dat je script twee keer tegelijkertijd wordt uitgevoerd, waardoor hij maar 1 ipv 2 erbij optelt)
edit: if(!$row1) die('Error: '.mysql_error());
Je controleert hier of $row1 iets is. Maar als de query mislukt is is $query1 al niets en gaat mysql_fetch_assoc mekkeren. Als je wilt controleren of de query is gefaald moet je $query1 contoleren, die is dan false. Nu controleer je eigenlijk net iets te laat (al zal dit ook werken, omdat mysql_fetch_assoc natuurlijk false teruggeeft omdat die boos is dat hij geen goed argument krijgt)
Gewijzigd op 18/07/2010 12:38:46 door Jelmer -
Kijk nou eens naar dat voorbeeldscriptje. Daar staat alles wat jij zoekt in.
Want ik zou het liever hebben niet optellen in de query maar met de string. Hoe kan ik dit doen?
EDIT: Want de $userID staat toch dat hij gelijk is aan $row1['value'] wat ook de user_id waarde (0 op dit moment) is.
En hoe kan ik dan doen $userID (die gelijk aan 0 zal zijn nu) + 1 doen?
Gewijzigd op 18/07/2010 12:40:55 door Ruben Portier
Of $userID++, of $userID = $userID + 1.
Ik heb toch al $userID++? Ik snap dus niet wat je bedoelt. En als ik ipv die $userID in die query bv een cijfer 3 zet krijg ik nog altijd die zelfde fout.
Ik zie niet in waarom je mysql_fetch_assoc voor die tweede query nodig hebt. Als je wilt kijken of hij gelukt is, pak je gewoon het resultaat van mysql_query, want dat is true als hij gelukt is, en false wanneer hij niet gelukt is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// Get the lastest userID from database
$query1 = mysql_query("SELECT value FROM counter WHERE name = 'user_id'");
// J: eerst checken of de query gelukt is, dan pas fetchen
// Check if query works
if(!$query1) die('Error: '.mysql_error());
$row1 = mysql_fetch_assoc($query1);
// Incrise userID with 1
$userID = $row1['value'];
$userID = $userID + 1;
// Update userID to database
$query2 = mysql_query("UPDATE counter SET value = '".$userID."' WHERE name = 'user_id'");
//var_dump($query2) // J: zou "true" op je scherm moeten toveren. Maar het vervangt niet de werking van mysql_fetch_assoc, is gewoon om even te controleren bij het scripten.
// Check if query works
if(!$query2) die('Error: '.mysql_error());
?>
// Get the lastest userID from database
$query1 = mysql_query("SELECT value FROM counter WHERE name = 'user_id'");
// J: eerst checken of de query gelukt is, dan pas fetchen
// Check if query works
if(!$query1) die('Error: '.mysql_error());
$row1 = mysql_fetch_assoc($query1);
// Incrise userID with 1
$userID = $row1['value'];
$userID = $userID + 1;
// Update userID to database
$query2 = mysql_query("UPDATE counter SET value = '".$userID."' WHERE name = 'user_id'");
//var_dump($query2) // J: zou "true" op je scherm moeten toveren. Maar het vervangt niet de werking van mysql_fetch_assoc, is gewoon om even te controleren bij het scripten.
// Check if query works
if(!$query2) die('Error: '.mysql_error());
?>
Ik heb nu jouw code en ik krijg nog altijd dezelfde error. Ik weet echt niet wat er fout is hoor.