2010-10-13 24 views
5

Böyle oldukça standart varsorunları

$hostname = '172.0.0.0'; 
$dbname = 'myname_mydbname'; 
$username = 'myname_user'; 
$pw = 'password'; 

olarak değişkenlerde kamu ağacının dışında dosyalarda veritabanları için benim giriş bilgileri depolamak neden php db değişkeninde vurgulamaktadır.

Sorun şu ki, çalışmakta olduğum bu özel barındırma, tüm veritabanlarının ve kullanıcı adlarının önüne eklenecek myname_ gerektirir. Bu dizeleri sakladığımda ve bunları bir PDO'ya ilettiğimde, myname'den sonra kullanıcı adındaki her şeyi düzeltir ve parola dizesini hep birlikte bırakır ... Eğer kullanıcı adı ve parola fonksiyonda dizgiler yerine dizge olarak koyarsam, her şey çalışır. Ben aklımın ucundayım. biri yardım edebilir mi? işte koddaki gibi.

Çalışmaz:

$this -> DB = new PDO ("mysql:host={$hostname}; dbname={$dbname}", $username, $pw); 

eser: burada biriyle umuyorum şimdiden ... bana aptal hissediyorum sayesinde yapabilirsiniz

$this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", 'myname_user', 'password'); 

. -David

hata yardımcı olabilecek

...

DB kolu alınamadı: SQLSTATE [28000] [1045] Access kullanıcısı 'myname' @ 'localhost' için reddedildi (şifrenizi kullanarak: NO) hiçbir kullandığınız bir "Veritabanı Kaynak adı" değil "Veritabanı Kaynağı Adı ve Kimlik Doğrulama" dize gerçektir - Ben PDO belgelerinde bulabilirsiniz

+0

"Yeni PDO" ifadesinden hemen önce var_dump ($ kullanıcı adı); – zerkms

+0

bu ilginç. NULL NULL. – david

+0

$ hostname = '172.0.0.0' ; $ dbname = 'myname_mydbname'; $ username = 'myname_user'; $ pw = 'password'; – david

cevap

0

hiçbir şey DSN dizesinde kullanıcı adı veya şifre belirleyebilirsiniz düşündürmektedir şifre bunun için bir ipucu olmalı ve 'myname' olmakta olan kullanıcı adı muhtemelen sadece çoğu RDBM’nin $ USER kullanmasıdır. belirtilmezse çevre var bağlamak için, (i 'myname' olarak ayarlanırsa varsayalım gereken)

yani nasıl basitçe ben inşa Geçici bir çözüm kimlik doğrulama bilgilerini

+0

Sadece * bazı * arka uçları (örneğin, postgreSQL) için kontrol ettiniz, DSN'de kimlik doğrulaması belirtebilirsiniz, ancak mysql değil. – tobyodavies

+0

Eh, değişkenler aslında onları kullanan dosyada sadece null olarak görünüyor. Bununla ilgili olarak bunun için $ USER varsayarak hakkında haklısınız. Değişkenlerin null olduğu niçin çekim yapmak zorunda kalacağım, saklandıkları dosyadan bir ifade ekleyebilirim, bu yüzden dahil edildiğini biliyorum. – david

+1

oops, sorunuzu oldukça yanlış anladım :(bunun çağrıldığı bir fonksiyonun içinde, global $ kullanıcı adınız var mı? Birçok kez düştüğüm bir tuzak var – tobyodavies

0

geçmesine ek parametreler kullanmak zorunda düşünüyorum Dosyada işlevlerin dizeleri döndüren bilgilerin saklandığını alır ve çalışır. Süper garip ama işe yarıyor.

+0

$ this -> DB = yeni PDO ("mysql: host =". getHost(). "; dbname =". getDBName(), getUserName(), getPW()); – david

0

sen 'sen olurdu tırnak saklamak istiyorsa

////the variable 
$myusr='myname_user'; 

////now append quotes 
    $user="'".$myusr."'"; 

///which would be the same thing as 
    $psswd= "'pass_word'"; 

pdo fonksiyonu (') '\' şifre \' tek tırnak çıkarmaz ekleme tırnak aynı sonucu almak gerekir 'sql ifadenizde saklanan teklifler otomatik kaçmayı önlemek için sınırlayıcılarla birlikte saklanmalıdır.

INSERT INTO `Auth_USERs` (`id`, `usrname`, `passwd`, `email`, `reg_date`) VALUES (NULL, '\'myname_user\'', '\'pass_word\'', '[email protected]', CURRENT_TIMESTAMP); 

sen rastladım {} bu bir konteynerin içinde olarak değişken davranır, bu yüzden olsun dizi çok yapar (farklı karakterlerle, daha sonra php sonraki sayfa yüklemesinde bunları kaçar) elbette '' ekler olarak Alma işlevlerinizi yapmak için bir java işlevi yürüttüğünüzden, aslında kaçmadığınız tırnakları eklersiniz. PDO işlevi onları kaçırana kadar.

$this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", $user, $psswd);