Error na mysql_fetch_assoc

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Bob Devlees

bob Devlees

17/07/2011 11:27:31
Quote Anchor link
Hallo,

Ik gebruik volgende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$cat = $_DBC->sql_query("SELECT * FROM ".$_table['sites']." WHERE id='".$row['site_id']."'",0);
$getcat = $_DBC->sql_fetch_assoc($cat);
$catdef = $_DBC->sql_query("SELECT * FROM ".$_table['category_nl']." WHERE id='".$getcat['category']."'",0);
$cats = $_DBC->sql_fetch_assoc($catdef);


Maar bij het laten zien van $cats['naam'] krijg ik steeds volgende error:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id='122'' at line 1
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in functions.php on line 34


Lijn 34 is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
function sql_fetch_assoc($result){
        
        return mysql_fetch_assoc($result);

    }


Ik weet niet goed hoe dit veroorzaakt wordt...
Verder misschien ook nog volgende vraag: is het misschien mogelijk die twee query's in 1 keer te laten uitvoeren?

Thanks
 
PHP hulp

PHP hulp

28/04/2024 10:35:47
 
Wouter J

Wouter J

17/07/2011 11:33:01
Quote Anchor link
Getallen moet je altijd buiten quotes houden. Daarnaast moet je niet * gebruiken in queries. Selecteer wat je wilt, zoals in het begin wil je alleen de categorie.

En waarom heb je je eigen object, terwijl het precies hetzelfde doet? Dan kan je beter kijken naar PDO of MySQLi.
 
Noppes Homeland

Noppes Homeland

17/07/2011 11:37:38
Quote Anchor link
Leer af om database, tabel en veldnamen in variabelen te plaatsen binnen een sql-statement!

Je loopt nu tegen het feit aan dat je niet weet welke variabelen waarde een fout bevat dan wel wel of niet bestaat enz enz enz.

Pas fatsoenlijk debug en foutafhandeling toe, dan voorkom je dat je dit soort raadsels voor je kiezen krijgt.
 
Bob Devlees

bob Devlees

17/07/2011 12:18:22
Quote Anchor link
Mijn $_table['category_nl'] bleek leeg te zijn, ik was hem domweg vergeten te definiëren :s
 
Joren de Wit

Joren de Wit

17/07/2011 12:19:22
Quote Anchor link
Quote:
Ik weet niet goed hoe dit veroorzaakt wordt...

Mocht dat nog niet duidelijk zijn uit voorgaande twee posts: dit wordt veroorzaakt door een fout in je SQL query. Probleem is nu alleen dat, zoals Noppes al zegt, moeilijk te achterhalen is waar de fout zit. Als je je query vooraf in een variabele zet (in je sql_query() method of nog daarvoor), kun je bij een foutmelding deze variabele weergeven zodat je weet hoe je query eruit zag toe hij uitgevoerd werd. Dan is de fout een stuk makkelijker op te sporen...
 
Bob Devlees

bob Devlees

17/07/2011 13:31:07
Quote Anchor link
Dus als ik het goed vat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$var = sql_query("SELECT * FROM ".$_table['sites']." WHERE id='".$row['site_id']."'",0);
$cat = $_DBC->$var;


?
 
Joren de Wit

Joren de Wit

17/07/2011 13:36:27
Quote Anchor link
Nope. Zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$sql
= "SELECT * FROM ".$_table['sites']." WHERE id=".$row['site_id'];
$cat = $_DBC->sql_query($sql);
?>

En dan uiteraard in sql_query() wel de nodige foutafhandeling als de daadwerkelijke query mislukt. $sql is nu de var die je kunt echoën als de query de fout in gaat.

ps. Overigens is dit natuurlijk niet nodig als je de foutafhandeling volledig in sql_query() doet. De benodigde variabele is dan gewoon de query die je als parameter op geeft...
 
Bob Devlees

bob Devlees

17/07/2011 13:43:11
 
Noppes Homeland

Noppes Homeland

17/07/2011 13:46:03
Quote Anchor link
Nee.... ik vraag me af of je wel weet waar je mee bezig bent?!

Een freubeltje wat het een en ander duidelijk moet maken
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
26
27
28
29
30
<?php
classe DB {


    function
setQuery($sql) {
        $this->query = $sql;
    }
    
    function
getError() {
        return mysql_error($this->result).'<br />'.$this->query;
    }

    function
qryExecute() {
        
        if (($this->result = mysql_query($this->query)) !== false) {
           return true;
        }

        else {
           return false;
        }
     }
}


$db = new DB();

$db->setQuery("SELECT * FROM WHERE id = 'hoopgeblaat'");
if ($db->qryExecute === false) {
   echo $db->getError();
}

?>


simpeler:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql
= "SELECT * FROM WHERE id = 'hoopgeblaat'";

if (($result = mysql_query($sql)) === false) {
    /*  dit is debugcode welke je zult moet hebben maar dan op een iets andere
        manier, als een query mislukt dan dien je een alternatief daarvoor te
        hebben zodat je code die afhaneklijk hiervan is gewoon doorlopen kan worden
        of wordt uitgesloten.
    */

    echo mysql_error().'<br />'.$sql;
}

?>
 



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.