help query bevat tabellen met collations latin1_swedish_ci en utf8_general_ci
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)
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
<?
// 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;
}
}?>
// 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
Gebruik overal dezelfde collations, dat hoor je toch al te doen om problemen te voorkomen. utf-8 ligt voor de hand.
°C wordt weergegeven als �C
is dit op te lossen door alles op utf/8 te zetten alvast bedankt pgfrank
Quote:
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.°C wordt weergegeven als �C
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.