SQL werkt niet met speciale tekens + Errors?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Olivier Peeters

Olivier Peeters

30/07/2012 16:46:45
Quote Anchor link
Hallo allen,

hier ben ik wederom ö En da's niet echt leuk :p

Allezinds....

Mijn PHP is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
        }
?>



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
 
PHP hulp

PHP hulp

19/04/2024 19:59:27
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/07/2012 16:58:37
Quote Anchor link
Je bind een parameter die niet in de query voorkomt.
En het is ook véél beter om je variabelen buiten quotes te houden.
 
Reshad F

Reshad F

30/07/2012 16:58:46
Quote Anchor link
als je deze query hebt..


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= "SELECT achternaam, voornaam, geboortedatum FROM atleten WHERE Achternaam = :achternaam AND Voornaam= :voornaam ";
?>


en sinds wanneer is een Naam een int?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$stmt
->bindParam(':Naam', $Naam, PDO::PARAM_INT);
?>


ik hoop toch echt dat je dit bedoelt...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$stmt
->bindParam(':Naam', $Naam, PDO::PARAM_STR);
?>
 
Olivier Peeters

Olivier Peeters

30/07/2012 17:15:21
Quote Anchor link
Hallo allen,

de code dient dus zo te zijn?

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
<?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
        }
?>


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
 
Arvid Hamersma

Arvid Hamersma

10/08/2012 00:42:05
Quote Anchor link
Goedendag,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}


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
 
Erwin H

Erwin H

10/08/2012 07:51:39
Quote Anchor link
Het probleem met de speciale tekens komt vaker voorbij, ook bij mij :-)
Hier mijn topic met mijn uiteindelijke oplossing: http://www.phphulp.nl/php/forum/topic/opgelost-juiste-character-set-gebruiken-mysqlphphtml/85169/
 
Arvid Hamersma

Arvid Hamersma

10/08/2012 12:31:10
Quote Anchor link
Ik heb mijn code iets gewijzigd:
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
$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);
}


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
 
Chris PHP

Chris PHP

10/08/2012 12:35:44
Quote Anchor link
Dat is een logische melding aangezien je daar gewoon mysql_query("SET names utf8, COLLATION_CONNECTION='utf8_bin', CHARACTER SET utf8", $db_handel); hebt staan.

declareer het eens aan je $query, dus zo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= "SET names utf8, COLLATION_CONNECTION='utf8_bin', CHARACTER SET utf8";
?>
 



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.