Error na het gebruiken van GROUP BY

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 »

Joep van Dongen

Joep van Dongen

17/07/2012 09:57:50
Quote Anchor link
Hallo,

Als ik deze functie gebruik dan lukt het me wel om in mijn selectbox dubbele merk_naam te filteren.

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
public function getMerken($database, $id = NULL)
    {
        $sql = "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info FROM ".$database."_merken GROUP BY merk_naam";
        if(!empty($id))
        {
            $sql .= " WHERE merk_code=:id";
        }
        else
        {
            $sql .= " ORDER BY merk_naam ASC";
        }
        try
        {
            $stmt = $this->db->prepare($sql);
            if(!empty($id)){ $stmt->bindParam(":id", $id, PDO::PARAM_STR); }
            $stmt->execute();
            $this->merkenlijst = $stmt->fetchAll(PDO::FETCH_OBJ);
            $stmt->closeCursor();
            
            return $this->merkenlijst;
        }
        catch (Exception $e)
        {
            die ( $e->getMessage() );
        }
    }


Echter wanneer ik op submit klik krijg ik deze error:

Fatal error: Call to a member function bindParam() on a non-object in /class/merken.class.php on line 34

Dat is deze lijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(!empty($id)){ $stmt->bindParam(":id", $id, PDO::PARAM_STR); }


Hiermee lees ik het uit:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
            <div id="wielen-zoeken">
<?php
    include_once "class/merken.class.php";
    $merkclass = new merken($dbo);
?>

                    <br />
                    <div class="bandwielkolom">
                        <form action="index.php?lang=nl&amp;p=<?php echo $_GET['p']; ?>#keuze" method="post">
                            <table class="bandentabel">
                                <tr>
                                    <th colspan="2">Zoek op merk<a name="wiel"></a></th>
                                </tr>
                                <tr>
                                    <td>Merk:</td>
                                    <td>
                                        <select name="wiel_merk">
                                            <option value="0">- Merk -</option>
<?php
    $merken
= $merkclass->getMerken($website, $merk_code);
    foreach($merken as $merk)
    {

        echo "\t\t\t\t\t\t\t\t\t\t\t<option value=\"".$merk->merk_code."\"";
        if(isset($_GET['search']) && $_GET['search'] == "wiel" && isset($_GET['merk']) && $_GET['merk'] == $merk->merk_code || isset($_POST['wiel_submit']) && $_POST['wiel_merk'] == $merk->merk_code) { echo " selected=\"selected\""; }
        echo ">".$merk->merk_naam."</option>\n";
    }

?>

                                        </select>
                                    </td>
                                </tr>
                                <tr>
                                    <td>&nbsp;</td>
                                    <td><input type="submit" name="wiel_submit" value="Zoek" /></td>
                                </tr>
                                <tr>
                                    <td colspan="2">&nbsp;</td>
                                </tr>
                                <tr>
                                    <td colspan="2">&nbsp;</td>
                                </tr>
                            </table>
                        </form>
                    </div>
                    <div class="clearboth"></div>
                    <br />
<?php
if(isset($_POST['wiel_submit']) && $_POST['wiel_submit'] == "Zoek" || isset($_GET['merk']))
{

    $merk = NULL;
    if(isset($_POST['wiel_submit']) && $_POST['wiel_submit'] == "Zoek")
    {

        $merk = $_POST['wiel_merk'];
    }

    $merken = $merkclass->getMerken($website, $merk);
        foreach($merken as $merk)
    {

?>

                    <img src="http://www.etyre.net/preview/bnet/logos/<?php echo str_replace(".png", "_150.png", $merk->merk_logo); ?>" width="150" class="logo" alt="<?php echo $merk->merk_naam; ?>"/>
                    <div id="merken">
                    <li><span class="title"><?php echo $merk->wiel_info; ?></span>
                            <a href="http://www.inter-tyre.nl/inter-tyre/images/w3/<?php echo $merk->wiel_foto; ?>" class="preview" title="Fotonummer: <?php echo $merk->wiel_foto;  ?>">
                                <img src="http://www.inter-tyre.nl/inter-tyre/images/w2/<?php echo $merk->wiel_foto; ?>" alt="Fotonummer: <?php echo $merk->wiel_foto; ?>" class="wheelImg"/>
                            </a>
                        <div class="clearboth"></div>
                    </div>
<?php
    }
?>

<?php
}
?>


Iemand een idee hoe ik die error op kan vangen of wat ik fout doe?
 
PHP hulp

PHP hulp

25/11/2024 08:39:22
 
Erwin H

Erwin H

17/07/2012 10:11:37
Quote Anchor link
Dat komt omdat je query niet klopt. Het prepare statement gaat dus niet goed en dus bestaat $stmt niet.

Het probleem met je query is dit:
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
<?php
$sql
= "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info
        FROM "
.$database."_merken
        GROUP BY merk_naam"
;
if(!empty($id))
{

  $sql .= " WHERE merk_code=:id";
}

else
{
  $sql .= " ORDER BY merk_naam ASC";
}


//dit resulteert in:
$sql = "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info
        FROM "
.$database."_merken
        GROUP BY merk_naam
        WHERE merk_code=:id"
;
?>

Een WHERE statement moet altijd voor de GROUP BY komen.
Gewijzigd op 17/07/2012 10:12:00 door Erwin H
 
Joep van Dongen

Joep van Dongen

17/07/2012 11:14:20
Quote Anchor link
Erwin bedankt!!! Ik ben hier zolang mee bezig geweest en wist dit dus niet eens. Stomme beginners fout maar wel raar dat alleen jij degene bent die hier mee komt. Heb het op meerdere fora gevraagd maar niemand zag dat het eigenlijk zo eenvoudig was.

Nogmaals bedankt! Je hebt m'n dag weer goed gemaakt:)
 
Erwin H

Erwin H

17/07/2012 11:19:34
Quote Anchor link
Haha, laten we zeggen dat je de fout een keer gemaakt moet hebben voor je hem kan vinden ;-)
 
Kris Peeters

Kris Peeters

17/07/2012 11:46:00
Quote Anchor link
Had niemand dat ooit gezien?

Er zit nochtans een logica in de volgorde. Als je even met mySQL mee-redeneert, zou je tot de zelfde volgorde komen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT ...
FROM mijn_tabel      // we gaan zoeken in deze tabel
WHERE ...            // clausule.  Eerst gaan we filteren in het aantal records die we nodig hebben
GROUP BY     ...     // met de records die we hebben, maken we een nieuwe tabel, alles gegroepeerd rond ...
ORDER BY  ...        // Die nieuw-samengestelde tabel kunnen we nu sorteren
LIMIT ...            // We hebben een gesorteerde tabel, en als laatste kiezen we welk van de records van die tabel we naar php gaan sturen
Gewijzigd op 17/07/2012 11:47:11 door Kris Peeters
 



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.