Tanımsız işlev sorgu için çağrı () - PHP PDO kullanarak

2 Cevap php

Ben bir MySQL veritabanı veri okur PHP bir script bir yazdım. Ben PHP için yeni duyuyorum ve ben PDO kütüphanesi kullanarak edilmiştir. Ben WAMP Sunucusu 2 kullanıyor ve tüm iyi çalışıyor bir Windows makinede geliştirmekteyiz. Ben kullanılacak LINUX sunucu benim komut dosyası yükledi benim komut dosyası çalıştırdığınızda, ancak ben şu hatayı alıyorum.

Fatal error: Call to undefined function query()

Bu hata oluştuğunu hattı ...

foreach($dbconn->query($sql) as $row)

Değişken $ DBConn önce benim dblogin.php tanımlanır aşağıda listesini veriyorum dosyası içerir.

<?php 
// Login info for the database
$db_hostname = 'localhost';
$db_database = 'MY_DATABASE_NAME';
$db_username = 'MY_DATABASE_USER';
$db_password = 'MY_DATABASE_PASSWORD';
$dsn = 'mysql:host=' . $db_hostname . ';dbname=' . $db_database . ';';

try
{
   $dbconn = new PDO($dsn, $db_username, $db_password);
   $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
  echo 'Error connecting to database: ' . $e->getMessage();
}
?>

Hata oluştuğunda işlev içinde ben gibi bir süper küresel olarak tanımlanan veritabanı bağlantısı var ...

global $dbconn;

Ben bütün geliştirme makinede iyi çalıştı beri ne oluyor olarak biraz karıştı. Ben PDO kütüphane kuruldu merak ama PHP v5 parçası varsayılan olarak yüklenen düşündüğüm. Edildi

Komut bir Ubuntu (5.0.51a-3ubuntu5.4) makinede çalışan ve PHP version 5.2.4 olduğunu. Herhangi bir öneriniz için teşekkür ederiz. Ben gerçekten bu kayıp duyuyorum.

2 Cevap

Her zaman ama her zaman, üretim platformu olarak aynı platform üzerinde gelişir. Sunucu yazılımı (PHP, MySQL, vb) sürümleri ayna için en iyi deneyin. Orada her zaman yükler arasında farklılıklar olabilir, ve özellikle farklı işletim sistemi platformları şeyleri işlemek şekilde olacaktır. Varsa, farklılıkları karşılaştırmak için her sunucuda eski 'phpinfo ()' komut dosyası kullanın.

Her neyse, burada hem Win ve Linux platformlarında her şeyin aynı sürümlere sahip olsa bile, size konfigürasyonunu kontrol ettiniz? Diğer bir deyişle, kendi DSN (Win geliştirme platformu ile bağlantılı) bir yerel MySQL konak olarak MySQL konak adı veya Ubuntu sunucu kullanan gerçek ev sahibi? Ya da iki durumda da hem "localhost" nelerdir? Çift, bu kontrol edin. Ayrıca, her iki sunucu üzerinde tüm verileri yansıtılmış var?

Eğer Ubuntu sunucu PDO olan bir gerçeği biliyor musunuz? Sen aslında onlar aynı olduğunu varsayıyorum dedi. Doğrulamak, sanmayın.

sobedai belirtildiği gibi, var_dump($dbconn) çıktısına bakmak aslında bir PDO nesnesi olup olmadığını kontrol edin ve oradan gitmek.

Bu benim için tipik bir PDO dağıtımıdır:

// 'logger' is a custom error logging function with email alerts
try {
    $dbh= new PDO(dsn);
    if ( is_a($dbh, "PDO") ) {
      $sql= 'SELECT field FROM table';
      $stmt= $dbh->query($sql);
      if ( is_a($stmt, "PDOStatement") ) {
          // handle resultset
      }
      else {
          // weirdness, log it
          logger("Error with statement: {$sql}" .$dbh->errorCode());
      }
    }
    else {
      // some weirdness, log it
      logger('Error making connection: '. $dbh->errorCode());
    }
}
catch (PDOException $e) {
  logger('PDOException caught in '.__FILE__.' : '. $e->getMessage());
}
catch (Exception $e) {
  logger('General Exception caught in '.__FILE__.' : '. $e->getMessage());
}

Ben SQL-92 state codes başvuran, orada PDO :: errorCode kullanıyorum unutmayın.

Aynı zamanda, mümkün olduğu kadar the manual bakın.

Bu durumda genellikle başvurmak için çalışıyoruz nesne aslında bir sınıfın bir örneği değil.

Eğer LAMP WAMP ve test gelişmekte oldum yana, yolları hemen akla gelen yer alıyor.

Check the php includes path is correct on your LAMP stack. Check that all the necessary libs are installed (just do a quick phpinfo() page or you can use php -i from the command line).

Ve son ama en az değil - do:

echo var_dump($dbconn);

gerçekten bunu düşünüyorum nesne olduğunu onaylayın.