Mysqli insert / OO Design Problem - Call to a member function bind_param() on a non-object in...

From: Date: Wed, 16 May 2007 16:21:28 +0000
Subject: Mysqli insert / OO Design Problem - Call to a member function bind_param() on a non-object in...
Groups: php.general 
Request: Send a blank email to php-general+get-255021@lists.php.net to get a copy of this message
Hi there, I'm new to OO-PHP and have encountered a problem that I just can't figure out. I have a class called DBAccess that extends mysqli. In a nutshell, it looks like this: class DBAccess extends mysqli { private static $instance; private static $preferences; /** Create an instance of DBAccess. */ private function __construct($host, $port, $user, $pass, $name) {
       self::$instance = parent::__construct($host, $user, $pass, $name);
} /** Populate and/or return an instance of DBAccess. */ public function getInstance() {
       if (empty(self::$instance)) {
           $preferences = Preferences::getInstance();
           // Let's set the database defaults if not previously set.
           if (self::$host == null) {
                   DBAccess::setHost($preferences->getProperty("TestDbHost"));
           }
           if (self::$port == null) {
                   DBAccess::setPort($preferences->getProperty("TestDbPort"));
           }
           if (self::$user == null) {
                   DBAccess::setUser($preferences->getProperty("TestDbUser"));
           }
           if (self::$pass == null) {
                   DBAccess::setPass($preferences->getProperty("TestDbPass"));
           }
           if (self::$name == null) {
                   DBAccess::setName($preferences->getProperty("TestDbName"));
           }
           self::$instance = new DBAccess(self::$host, self::$port,
               self::$user, self::$pass, self::$name);
           return self::$instance;
       }
} . . . } I also have a class, call it MyClass, that tries to connect using DBAccess and insert a record. It can connect to the database, but encounter a problem (Call to a member function bind_param() on a non-object) when I try to insert a record. Here's the MyClass class (some of the complexity removed): class MyClass { private static $conn; private static $preferences; /** Create an instance of ContactInformation. */ public function __construct() {
       self::$conn = DBAccess::getInstance();
       self::$preferences = Preferences::getInstance();
} /** Populate instance. */ public function set($args) {
      // Calls to $this->set<ARG>;
} /** Insert record. */ public function insert() {
       $sql = "INSERT INTO table (" .
               "field_1, " .
               "field_2, " .
               "field_3) " .
               "?, " .
               "?, " .
               "?)";
       echo "Server version: " .  self::$conn->server_info;
       $stmt = self::$conn->prepare($sql);
       $stmt->bind_param('sssssssssssss',
               $this->getField1(),
               $this->getField2(),
               $this->getField3());
       $stmt->execute();
       $stmt->close();
} } If I execute the following code: $conn = DBAccess::getInstance(); $someClass = new Class(); $someClass->set(<ALL THE ARGS); $someClass->insert(); I see the following output: Server version: 5.0.21-Debian_3ubuntu1-log Fatal error: Call to a member function bind_param() on a non-object in C:\blah\blah\blah The fact that the server version is correctly displayed, suggests that it is connecting. Why is it having issues with the $stmt? Anyone know? The smallprint: The DBAccess class looks a little funky - I'm playing around with the Singleton Design Pattern, and plan to refine it once I get the kinks (like this) worked out. Thanks in advance for any thoughts. - Leee

« previous php.general (#255021) next »