Whitespace na PDO construct
Ik zit met het volgende probleempje:
In mijn site maak ik gebruik van MVC, en ik probeer een RSS-feed weer te geven via de url /posts/all/feed/ Dan beginnen de troubles. Ik krijg een error van firefox: XML Parsing Error: XML or text declaration not at start of entity. Er staat een spatie voor de xml declaration. Ik heb nu door middel van commenten kunnen bepalen dat dit in een regel gebeurt waar de PDO wordt geconstruct. Als dit is gecomment staat er dus geen spatie meer. Hoe kan dit ooit? Die regel kan (zelfs als er een spatie voor of achter staat) geen spatie als html laten zien, en de PDO class is neem ik aan ook wel fatsoenlijk gebouwd, waardoor het mij gek lijkt dat er ergens een spatie te veel in staat.
Hebben jullie enig idee waardoor die whitespace kan komen?
Het regeltjes waar het fout gaat:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// set up database connectivity
$reg->db = new PDO(
"mysql:dbname=" . $reg->config['database']['database'] . ";host=" . $reg->config['database']['host'],
$reg->config['database']['username'],
$reg->config['database']['password']
);
?>
// set up database connectivity
$reg->db = new PDO(
"mysql:dbname=" . $reg->config['database']['database'] . ";host=" . $reg->config['database']['host'],
$reg->config['database']['username'],
$reg->config['database']['password']
);
?>
Mark
Gewijzigd op 01/01/1970 01:00:00 door Mark D
Wat voor een text-editor gebruik je? Misschien dat je editor een BOM (Byte Order Marker) toevoegt aan het begin van het bestand...
Ik neem aan dat je dat met text-editor bedoelt...
Het is alleen wel gek dat mn editor dat dan alleen bij een class zou doen waar hij eigenlijk geen toegang toe heeft, aangezien het dan in het bestand van de PDO class zou moeten staan. De whitespace gaat namelijk weg zodra ik het aanmaken van een PDO object comment. De PDO class staat neem ik aan ook op een heel andere plek dan mij public_html directory.
$req, $req->config en $req->config['database'] zijn alle drie ook niet vreemde objecten? Het zou kunnen dat je daar dingen doet als __get en __set, of iets met ArrayAccess, en daar dus allemaal method-aanroepen hebt staan, en tijdens die aanroepen zou ergens een spatie tevoorschijn kunnen komen. Include config een of ander bestandje, en zit daar misschien die spatie of BOM in?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
// set up database connectivity
$reg->db = new PDO(
"mysql:dbname=blog;host=localhost",
"root",
""
);
?>
// set up database connectivity
$reg->db = new PDO(
"mysql:dbname=blog;host=localhost",
"root",
""
);
?>
Zo werkt het dus ook niet.
Ik wil ook wel meer code posten, maar ik ben niet helemaal zeker welke stukken jullie dan precies willen hebben...
Gewijzigd op 01/01/1970 01:00:00 door Mark D
Wat zijn de gevolgen wanneer je $reg->db eruit comment. Welke code wordt dan als gevolg daarvan nog meer niet uitgevoerd. Zou het probleem in die code kunnen zitten?
Public vars zijn zoiezo oncontroleerbaar.
Gebruik getters & setters, dan heb je iets van controle over wat er in een var gaat...
een public var is als een unox rookworst in een paaldans club...
@Lode, ik gebruik ook setters en getters. Je hebt in php5 daar de mooie methods __get() en __set() voor.
Probleem is opgelost. Het zat hem uiteindelijk toch niet in de PDO maar een spatie achter de php sluittag in registry.php. Ik snap alleen nog steeds niet waarom die spatie niet werd weergegeven als ik de pdo construct had gecomment...
Moet host niet voor dbname komen of maakt dat niet uit? Desnoods even een try/catch doen om er achter te komen.
Tip voor Mark: Sluit PHP nooit met een sluittag. Laat de sluittag gewoon weg, je ziet maar weer wat dit voor problemen geeft.