SQL werkt niet met speciale tekens + Errors?
hier ben ik wederom ö En da's niet echt leuk :p
Allezinds....
Mijn PHP is:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$sql = "SELECT * FROM `atleten` WHERE Achternaam='$achternaam' AND Voornaam='$voornaam' AND Geboortedatum = '$geboortedatum' AND Lifenr='$lifenr' ";
$stmt = $db->prepare($sql);
$stmt->bindParam(':Naam', $Naam, PDO::PARAM_INT);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
// Do something
}
?>
$sql = "SELECT * FROM `atleten` WHERE Achternaam='$achternaam' AND Voornaam='$voornaam' AND Geboortedatum = '$geboortedatum' AND Lifenr='$lifenr' ";
$stmt = $db->prepare($sql);
$stmt->bindParam(':Naam', $Naam, PDO::PARAM_INT);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
// Do something
}
?>
Mijn SQL is (geecho'd):
"SELECT * FROM `atleten` WHERE Achternaam='Vanderheyden' AND Voornaam='Amélie' AND Geboortedatum = '2003-08-21' AND Lifenr='11001' "
Als ik deze uitvoer in mijn DB zelf, heb ik geen problemen. Echter bij het uitvoeren op deze pagina mislukt het telkens. Als ik error_reporting(E_ALL);
doe krijg ik volgende fouten:
PHP Error Message
Notice: Use of undefined constant voornaam - assumed 'voornaam' in /home/a5852590/public_html/Inschrijvingen/gegevens.php on line 151
Free Web Hosting
PHP Error Message
Notice: Use of undefined constant achternaam - assumed 'achternaam' in /home/a5852590/public_html/Inschrijvingen/gegevens.php on line 152
Free Web Hosting
PHP Error Message
Notice: Use of undefined constant geboortedatum - assumed 'geboortedatum' in /home/a5852590/public_html/Inschrijvingen/gegevens.php on line 153
Free Web Hosting
PHP Error Message
Notice: Use of undefined constant lifenr - assumed 'lifenr' in /home/a5852590/public_html/Inschrijvingen/gegevens.php on line 154
Free Web Hosting
SELECT * FROM `atleten` WHERE Achternaam='Vanderheyden' AND Voornaam='Amélie' AND Geboortedatum = '2003-08-21' AND Lifenr='11001'
PHP Error Message
Notice: Undefined variable: Geboorte in /home/a5852590/public_html/Inschrijvingen/gegevens.php on line 190
Free Web Hosting
Het rare is, als ik een SQL uitvoer met 'normale' tekens (geen é, ç, à, ...) bv.. "SELECT * FROM `atleten` WHERE Achternaam='Peeters' AND Voornaam='Olivier' AND Geboortedatum = '1991-10-16' AND Lifenr='5555555' " heb ik geen enkel probleem (enkel wel die foutmeldingen).
Wat doe ik mis?
Groeten,
Olivier
En het is ook véél beter om je variabelen buiten quotes te houden.
Code (php)
1
2
3
2
3
<?php
$sql = "SELECT * FROM `atleten` WHERE Achternaam='$achternaam' AND Voornaam='$voornaam' AND Geboortedatum = '$geboortedatum' AND Lifenr='$lifenr' ";
?>
$sql = "SELECT * FROM `atleten` WHERE Achternaam='$achternaam' AND Voornaam='$voornaam' AND Geboortedatum = '$geboortedatum' AND Lifenr='$lifenr' ";
?>
dan verdien je het ook om een ö te krijgen!
de query hoort allereerst zo
(omdat je prepared statement gebruikt) en sowieso moeten variabelen buiten quotes..
Code (php)
1
2
3
2
3
<?php
$sql = "SELECT achternaam, voornaam, geboortedatum FROM atleten WHERE Achternaam = :achternaam AND Voornaam= :voornaam ";
?>
$sql = "SELECT achternaam, voornaam, geboortedatum FROM atleten WHERE Achternaam = :achternaam AND Voornaam= :voornaam ";
?>
en sinds wanneer is een Naam een int?
ik hoop toch echt dat je dit bedoelt...
de code dient dus zo te zijn?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$sql = "
SELECT *
FROM atleten
WHERE Achternaam=:achternaam AND Voornaam=:voornaam AND Geboortedatum=:geboortedatum AND Lifenr=:lifenr ";
$stmt = $db->prepare($sql);
$stmt->bindParam(':achternaam', $_GET['achternaam'], PDO::PARAM_STR);
$stmt->bindParam(':voornaam', $_GET['voornaam'], PDO::PARAM_STR);
$stmt->bindParam(':geboortedatum', $_GET['geboortedatum'], PDO::PARAM_STR);
$stmt->bindParam(':lifenr', $_GET['lifenr'], PDO::PARAM_INT);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
// DO
}
?>
$sql = "
SELECT *
FROM atleten
WHERE Achternaam=:achternaam AND Voornaam=:voornaam AND Geboortedatum=:geboortedatum AND Lifenr=:lifenr ";
$stmt = $db->prepare($sql);
$stmt->bindParam(':achternaam', $_GET['achternaam'], PDO::PARAM_STR);
$stmt->bindParam(':voornaam', $_GET['voornaam'], PDO::PARAM_STR);
$stmt->bindParam(':geboortedatum', $_GET['geboortedatum'], PDO::PARAM_STR);
$stmt->bindParam(':lifenr', $_GET['lifenr'], PDO::PARAM_INT);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
// DO
}
?>
Zelfde probleem, met een é werkt dit niet. Normaal werkt dit wel? Moet ik htmlentities gebruiken?
(*) * Dat sterretje verander ik straks wel door de 15 kolommen die geselecteerd moeten worden :-)
Groeten,
Olivier
Ik heb een iets ander probleem, maar wel verwand.
Bij mij is het probleem bij het weg schrijven van de é.
De query die ik uitvoer is:
UPDATE product_description SET name='Test é',description='Test met een é',language_id = '2' WHERE product_id = '2885'
De code die ik gebruik is alsvolgt
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database,$db_handle);
$log->lwrite($query);
if ($db_found) {
$result = mysql_query($query,$db_handle);
mysql_close($db_handle);
}else {
$log->lwrite("Database NOT Found ");
mysql_close($db_handle);
}
$db_found = mysql_select_db($database,$db_handle);
$log->lwrite($query);
if ($db_found) {
$result = mysql_query($query,$db_handle);
mysql_close($db_handle);
}else {
$log->lwrite("Database NOT Found ");
mysql_close($db_handle);
}
Als ik daarna de waarde bekijk via php is de waarde in het veld name 'Test é' en in description 'Test met een é'
De structuur van de table is:
Kolom Type Collatie Attributen Null Standaardwaarde
product_id int(11) Nee Geen AUTO_INCREMENT
language_id int(11) Nee Geen
name varchar(255) utf8_bin Nee Geen
description text utf8_bin Nee Geen
Als ik de zelfde query uitvoer via PhpMyAdmin dan gaat het wel goed.
Weet misschien iemand wat ik fout doe??
Alvast bedankt!!
Arvid
Hier mijn topic met mijn uiteindelijke oplossing: http://www.phphulp.nl/php/forum/topic/opgelost-juiste-character-set-gebruiken-mysqlphphtml/85169/
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database,$db_handle);
$log->lwrite($query);
if ($db_found) {
// Force UTF-8.
mysql_query("SET names utf8, COLLATION_CONNECTION='utf8_bin', CHARACTER SET utf8", $db_handel);
$result = mysql_query($query,$db_handle);
mysql_close($db_handle);
$log->lwrite("Records added to the database $result.");
}
else {
$log->lwrite("Database NOT Found ");
mysql_close($db_handle);
}
$db_found = mysql_select_db($database,$db_handle);
$log->lwrite($query);
if ($db_found) {
// Force UTF-8.
mysql_query("SET names utf8, COLLATION_CONNECTION='utf8_bin', CHARACTER SET utf8", $db_handel);
$result = mysql_query($query,$db_handle);
mysql_close($db_handle);
$log->lwrite("Records added to the database $result.");
}
else {
$log->lwrite("Database NOT Found ");
mysql_close($db_handle);
}
Echter ik krijg dan fouten op de toegevoegde regel:
PHP Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/public_html/xml/test.php on line 57
declareer het eens aan je $query, dus zo