2016-05-13 14 views
0

ich ein Problem haben, wenn ich neue PDO rufen mit einer vordefinierten Variable ..neue PDO Problem mit var string definiert

ich diese bekam

define('SQL_BDD', 'ctms_demo'); 

in meinem config.php, die aufgerufen wird, alle pHP-Seiten, so kann ich es benutzen überall

, wenn ich diese nennen

$hostname='localhost'; 
$dbname='ctms_demo'; 
$username='root'; 
$password='password'; 

$set = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 

es funktioniert gut, aber wenn ich Ändern Sie diese Zeile

$dbname=SQL_BDD; 

Es funktioniert nicht mehr ..

ich für einige Themen sah im Gespräch über die Verwendung von doppelten Anführungszeichen ist ok .. so sehe ich nicht wirklich, wo das Problem ist ..

edit: ich habe diese:

$dsn = sprintf('mysql:host=%s;dbname=%s',$hostname,SQL_BDD); 
print_r($dsn); 
$set = new PDO($dsn, $username, $password); 

und ich bekam "mysql: host = localhost; dbname = ctms_demo", so die definierte var arbeitet .. ich verstehe nicht ..

+0

Definieren Sie "funktioniert nicht"? Welche Fehlermeldung/Symptome? – Timo

+0

Ich habe keine Fehlermeldung und meine Seite neu laden, wenn es in Ordnung ist .. und es tut .. – Nemka

Antwort

0

Konstanten werden nicht innerhalb von Zitaten erweitert, so brechen aus ihnen heraus:

$set = new PDO("mysql:host=$hostname;dbname=" . SQL_BDD, $username, $password); 

Die Magie mit Variablen innerhalb der doppelten Anführungszeichen der $ ist. Wie soll der PHP-Parser wissen, dass Sie die Konstante SQL_BDD und nicht den Text SQL_BDD meinen? Das wäre eine sehr teure Operation, um jedes Wort in einer Zeichenkette zu prüfen und in der definierten Konstantentabelle nachzuschlagen.

+0

Vielen Dank AbraCadaver Ich lese die URL, die Sie gerade senden – Nemka

+0

Es funktioniert nicht mit Konstante, also habe ich versucht, diese ' $ dbname = SQL_BDD; \t \t $ file = fopen ('text.txt', 'w +'); \t fwrite ($ file, $ dbname); \t fclose ($ datei); \t $ dbname2 = $ dbname; \t \t $ file = fopen ('text.txt', 'w +'); \t fwrite ($ file, $ dbname2); \t fclose ($ datei); ' Ich habe mein 'ctms_demo' in meiner .txt-Datei .. also warum das neue PDO nicht versteht, dass ich 'ctms_demo' in meinem $ dbname var setzen will? – Nemka