Yeni php nesneye adodb bağlantı geçmek

5 Cevap php

Ben bir sınıf kurucusunu bir adodb bağlantısı üzerinden ama bu hatayı alıyorum bunu yaparken geçmesine çalışıyorum:

mysql_error(): supplied argument is not a valid MySQL-Link resource

Yani bağlam içine koymak için, ben böyle bir yeni adodb bağlantı örneği var:

// establish database connection
$db = ADONewConnection($dsn);
if (!$db) die(mysql_error());

Sonra benim yeni kullanıcı erişim nesnesi oluşturulur ve bu gibi adodb bağlantılı geçti:

$user = new UserAccess($db);

Bu kullanıcı erişim sınıfı yapıcısı:

function UserAccess($oDbLink) {
   // check we have a valid connection
}

Ben ne yapıyorum yanlış Herhangi bir fikir?

Thanks, Gaz

5 Cevap

Sana verilen kod kısmında belirgin bir hata göremiyorum, bu yüzden sana öneririm:

  • şu an için bir kenara bırakın nesne
  • Lütfen error_reporting() için E_ALL set
  • parametreleri çift kontrol $dsn - Eğer komut satırından bağlanmak denemek isteyebilirsiniz ...
  • erişim ayrıcalıklarını kontrol ve FLUSH PRIVILEGES çalıştırın
  • $db->debug = TRUE; ile adodb hata ayıklama açmak
  • Bir $db->Execute("SELECT * FROM tablename") or die($db->ErrorMsg()); ile nesnenin dışından şeyi test edin

Bir mesaj alıyorum bağlantı kaynak geçerli bir bağlantı değil - de, genellikle doğrudur. Veritabanı var ve çalışıyor aslında kontrol etmeyi unutmayın.

Sorun $db sizden olsun nesne ADONewConnection ile PHP'nin mysql_ * işlevleri kullanmaya çalışıyorsanız muhtemeldir. Bu bir mysql kolu değil, bu yüzden bu fonksiyonları ile çalışmaz - sen adodb kendi malzeme kullanmak gerekir.

Eğer temin ettik ne sizin kodu ile yanlış bir şey. Daha tam bir şey arz ise o yardımcı olabilir.

Etrafında bir ADODB bağlantı geçen bir real nedeni var mı? Bu sadece her yerde ve daha fazla iş kabul edilmesi gerekir ve gerçek bir neden olmadan ... Bunu yapmak için tereddüt ediyorum. Hatta standart bir küresel daha iyi olabilir (evet globallerinin kötülük vardır) ya da belki bir Singleton sınıf?

Kodunuzu aşağıdaki gibi olmalıdır:

// establish database connection
$db = ADONewConnection($dsn);
if ( ! $db )
{
  // just display error message
  // you cannot use mysql_error, since you haven't connected to any database
  die ("Cannot connect, check the parameter and make sure db is running!");
}

Kullanıcı referans, kopyalama nesne önlemek için

function UserAccess(&$oDbLink) {
 // check we have a valid connection
}

Bu yardım umuyoruz.

Cevaplar için teşekkürler, ben $ dsn değişkeni kaldırarak bu çalışma başardı ve sadece $ _Global değişkenler geçirerek ettik