2011-12-30 24 views
0

私はphp oop.hereを初めて使っています。シングルトンクラスでデータベース接続を行いたいのですが、このようなエラーがあります: 致命的なエラー: C内の非オブジェクトのメンバ関数にgetone():\ XAMPP \ htdocsに\ シングルトン\新しい\ singleton_db.phpここで私は2つのファイル致命的なエラー:非オブジェクトのgetOne()メンバ関数を呼び出す

1.singleton_db.php

<?php 
     class database 
     { 
     public $query; 
     public $results; 
     public $conn; 

      public static $database; 

      //connect to the database 
      public function __construct() 
       { 

         $this->conn = mysql_connect('localhost','root',''); 
         if ($this->conn) 
      { 
       mysql_select_db('test1'); 
      } 

       } 

      public static function instance() 
       { 
        if (!isset(self::$database)) { 
         self::$database = new database(); 
        } 

        return self::$database; 
       } 
       function getOne($sql) { 
      $result = $this->conn->getOne($sql); //Error in this line 


      if(database::isError($result)) { 
       throw new Exception($result->getMessage(), $result->getCode()); 
      } 

      return $result; 
      } 

      function startTransaction() { 
      //autoCommit returns true/false if the command succeeds 
      return $this->conn->autoCommit(false); 
      } 

      function commit() { 
      $result = $this->conn->commit(); 

      if(database::isError($result)) { 
       throw new Exception($result->getMessage(), $result->getCode()); 
      } 

      $this->conn->autoCommit(true); 
      return true; 
      } 

      function abort() { 
      $result = $this->conn->rollback(); 

      if(database::isError($result)) { 
       throw new Exception($result->getMessage(), $result->getCode()); 
      } 

      return true; 
      } 



     //returns numerically indexed 1D array of values from the first column 
     public function insert($table, $arFieldValues) { 
      $fields = array_keys($arFieldValues); 
      $values = array_values($arFieldValues); 

      // Create a useful array of values 
      // that will be imploded to be the 
      // VALUES clause of the insert statement. 
      // Run the mysql_real_escape_string function on those 
      // values that are something other than numeric. 
      $escVals = array(); 
      foreach($values as $val) { 
       if(! is_numeric($val)) { 
       //make sure the values are properly escaped 
       $val = "'" . mysql_real_escape_string($val) . "'"; 
       } 
       $escVals[] = $val; 
      } 
      //generate the SQL statement 
      $sql = " INSERT INTO $table ("; 
      $sql .= join(', ', $fields); 
      $sql .= ') VALUES('; 
      $sql .= join(', ', $escVals); 
      $sql .= ')'; 

      $hRes = mysql_query($sql); 
      if(! is_resource($hRes)) { 
       $err = mysql_error($this->conn) . "\n" . $sql; 
       throw new Exception($err); 
      } 

      return mysql_affected_rows($hRes); 
      } 

     } 

2を与えています.data.php

<?php 

       require_once('singleton_db.php'); 

       try { 
       $db = database::instance(); 
       } catch (Exception $e) { 
       // No point continuing... 
       die("Unable to connect to the database."); 
       } 

       $sql = "SELECT count(1) FROM mytable"; 
       $count = $db->getOne($sql); 
       print "There are $count records in mytable!<br>\n"; 

       // start a transaction 
       $db->startTransaction(); 

       // do an insert and an update 
       try { 
       $arValues = array(); 
       $arValues['id'] = '#id#'; 
       $arValues['myval'] = 'blah blah blah'; 
       $newID = $db->insert('mytable', $arValues); 

       print "The new record has the ID $newID<br>\n"; 

       // update the record we just created 
       $arUpdate = array(); 
       $arUpdate['myval'] = 'foobar baz!'; 
       $affected = $db->update('mytable', $arUpdate, "id = $newID"); 

       print "Updated $affected records<br>\n"; 

       // write the changes to the database 
       $db->commit(); 
       } catch (Exception $e) { 
       // some sort of error happened - abort the transaction 
       // and print the error message 
       $db->abort(); 
       print "An error occurred.<br>\n" . $e->getMessage(); 
       } 

       ?> 

これを解決するにはどうすればよいですか?

+3

なぜPHPがMySQLIとPDOの形で完全に優れたものを提供しているのでしょうか? – GordonM

答えて

1

あなたの問題は、あなたが適切

getOne(); 

メソッドを定義していないです。プロパティ

$this->conn 

にmysql_connect()が機能「成功へのMySQLのリンクID、失敗した場合にFALSE」だけの結果です。これはオブジェクトではないので、getOne()を要求することはできません。方法。

関連する問題