mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ruben Portier

Ruben Portier

18/07/2010 12:07:13
Quote Anchor link
Beste

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$query2
= mysql_query("UPDATE counter SET value = '".$userID."' WHERE name = 'user_id'");
$row2 = mysql_fetch_assoc($query2);
?>
 
PHP hulp

PHP hulp

05/11/2024 11:29:44
 
- SanThe -

- SanThe -

18/07/2010 12:12:40
Quote Anchor link
Je query zal mislukt zijn.
Foutafhandeling ontbreekt.
 
Ruben Portier

Ruben Portier

18/07/2010 12:13:43
Quote Anchor link
Ja, maar wat is er dan aan mislukt? Ik snap niet wat er fout is. Die tabel bestaat.
 
- SanThe -

- SanThe -

18/07/2010 12:14:49
Quote Anchor link
Als je een fatsoenlijke foutafhandeling inbouwt krijg je de juiste error te zien.
Gewijzigd op 18/07/2010 12:15:05 door - SanThe -
 
Ruben Portier

Ruben Portier

18/07/2010 12:16:15
Quote Anchor link
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.
 
- SanThe -

- SanThe -

18/07/2010 12:18:40
 
Ruben Portier

Ruben Portier

18/07/2010 12:20:34
Quote Anchor link
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.
 
Jelmer -

Jelmer -

18/07/2010 12:20:36
Quote Anchor link
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().
 
Ruben Portier

Ruben Portier

18/07/2010 12:22:16
Quote Anchor link
Dat heb ik ook zo Jelmer. Zo dom ben ik ook niet ;)
Ik heb onder die query en onder die fetch gezet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo mysql_error();
?>


Ook met die() mag het niet deugen.
 
- SanThe -

- SanThe -

18/07/2010 12:24:49
Quote Anchor link
Nu kan je wel tegen mij gaan mopperen. Vind ik best, maar je kan ook even lezen. Dit staat op die link.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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!';
}

?>


Edit:

Je kan op een UPDATE query niet FETCHEN.
Gewijzigd op 18/07/2010 12:26:29 door - SanThe -
 
Jelmer -

Jelmer -

18/07/2010 12:25:09
Quote Anchor link
Wacht even, volgens mij is het veel simpeler. Doe eens 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.
 
Ruben Portier

Ruben Portier

18/07/2010 12:27:06
Quote Anchor link
Ja, maar als ik alleen die query doe, word de database dan geüpdate? Of moet je eerst nog die mysql_fetch_assoc of wat anders doen? Want in mijn db wordt nog niets geüpdate.

@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
 
Jelmer -

Jelmer -

18/07/2010 12:30:10
Quote Anchor link
Ok, post eens je code die je nu gebruikt. Inclusief de error-reporting en het genereren van de query en de waarden die je daarin stopt.

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 -
 
Ruben Portier

Ruben Portier

18/07/2010 12:31:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());
?>
Gewijzigd op 18/07/2010 12:31:43 door Ruben Portier
 
Jelmer -

Jelmer -

18/07/2010 12:35:36
Quote Anchor link
Dit gaat mis: $userID = $userID++;
Doe maar eens
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$userID
= 4;
$userID = $userID++;
var_dump($userID);
?>

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)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE counter SET value = value + 1 WHERE name='user_id'


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 -
 
- SanThe -

- SanThe -

18/07/2010 12:36:00
Quote Anchor link
Kijk nou eens naar dat voorbeeldscriptje. Daar staat alles wat jij zoekt in.
 
Ruben Portier

Ruben Portier

18/07/2010 12:39:11
Quote Anchor link
Bedankt Jelmer, maar als ik de userID optel met 1 via een query hoe kan ik dan $userID gebruiken bij een andere query? Moet ik dan weer doen $userID = select user_id....

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
 
Jelmer -

Jelmer -

18/07/2010 12:51:58
Quote Anchor link
Of $userID++, of $userID = $userID + 1.
 
Ruben Portier

Ruben Portier

18/07/2010 12:53:25
Quote Anchor link
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.
 
Jelmer -

Jelmer -

18/07/2010 13:01:33
Quote Anchor link
Zie de uitleg van mijn vorige post waarin ik zeg dat $userID = $userID++ fout gaat. Daarom werkt niet wat jij nu hebt, en daarom werken die twee alternatieven die ik geef wel.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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());
?>
 
Ruben Portier

Ruben Portier

18/07/2010 13:03:35
Quote Anchor link
Ik heb nu jouw code en ik krijg nog altijd dezelfde error. Ik weet echt niet wat er fout is hoor.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.