help query bevat tabellen met collations latin1_swedish_ci en utf8_general_ci

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Malick heuvel

malick heuvel

28/11/2007 12:01:00
Quote Anchor link
hey PHPers,

Ik ben een shopping cart aan het schrijfen in PHP nu heb ik 3 mysql tabellen die ik hierbij gebruik welke allen de ENGINE InnoDB hebben maar 2 tabellen hebben de collation utf8_general_ci en 1 tabel heeft de collation latin1_swedish_ci


Nu krijg ik van een script welke fungeert als exception handler de volgende error

Fatal error: Uncaught exception 'QueryException' with message 'Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='' in /var/www/bioconnect/class.DB.php:32 Stack trace: #0 /var/www/bioconnect/class.Cart.php(112): CDB->query('SELECT a.id as ...') #1 /var/www/bioconnect/checkout.php(25): Cart->Display() #2 {main} thrown in /var/www/bioconnect/class.DB.php on line 32

Kennelijk is het niet toegestaan om in PHP5.0.45/MYSQL querys waarbij verschillende tabellen die verschillende collations bevatten uit te voeren.




Mijn query welke niet lukt
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
<?
// table cart_details = utf
// table suppliers = latin1

public function Display()
    {

        $cartItems = array();
        $sql = "SELECT a.id as id, a.intern_cat_num as item_id, a.sale_price_euro as price, a.qty as qty,
                                     b.short_name as title
                                     FROM carts_details a, suppliers b
                                     WHERE a.cart_id = '$this->CartId' AND a.intern_cat_num = b.intern_cat_num"
;
        
        $result = $this->db->query($sql);
        if ($this->db->affected_rows > 0)
        {

            while ($row = $result->fetch_assoc())
            {

                $cartItems[] = array('item_id' => $row['item_id'], 'title' => $row['title'], 'price' => $row['price'], 'qty' => $row['qty']);
            }

            return $cartItems;
        }

        else
        {
            return NULL;
        }
    }
?>


is dit waar alvast bedankt voor de hulp en advies
 
PHP hulp

PHP hulp

03/01/2025 07:35:14
 
Frank -

Frank -

28/11/2007 12:07:00
Quote Anchor link
Gebruik overal dezelfde collations, dat hoor je toch al te doen om problemen te voorkomen. utf-8 ligt voor de hand.
 
Malick heuvel

malick heuvel

28/11/2007 12:21:00
Quote Anchor link
utf-8 waarom deze en niet latin1 misschien dat dit meteen samenhangt met een vraag die ik hierbij nog heb er zijn tekens uit mijn db die als vraagtekens worden weergegeven zoals tekencode 00B0

°C wordt weergegeven als &#65533;C

is dit op te lossen door alles op utf/8 te zetten alvast bedankt pgfrank
 
Frank -

Frank -

28/11/2007 12:44:00
Quote Anchor link
Quote:
°C wordt weergegeven als &#65533;C
Dan ben je waarschijnlijk met een html-functie aan het prutsen, normaal gebeurt dat namelijk echt niet. Data zet je zonder enige aanpassingen in de database, je zorgt er alleen voor dat quotes op de correcte manier worden geescaped. Dus niet met addslashes(), maar de juiste databases-specifieke PHP-functie of nog liever met de prepared statements van PDO.

utf-8 is een zeer uitgebreide tekenset, daarmee kun je vrijwel iedere taal ondersteunen, evenals 'gekke' tekens. Met andere sets wil dat nog wel eens grandioos mislukken. Zorg er wel voor dat jouw html-pagina's ook utf-8 als charset gebruiken, anders loopt de conversie in het honderd.
 



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.