Jump to content

Call to a member function escapeValue() on a non-object


erikgoranzon

Recommended Posts

Hi

I did something in phpmyadmin the other day and I cant my site back to work. please see the attatched pdf with print screens of what I did.

Basically I was trying to add this:

INSERT INTO `PP088_config_options` ( `id` , `category_name` , `name` , `value` , `config_handler_class` , `is_system` , `option_order` , `dev_comment` ) VALUES ( NULL , 'general', 'installation_base_language', 'se_se', 'StringConfigHandler', '0', '12', NULL
);

in one of the tables. When visiting www.konto.gradeup.se you will see the error message. I inserted the code from the DB.class.php file that I think is causing the problem.

*/
    static function escape($value) {
      return self::connection()->escapeValue($value);
    } // escape
    
    /**
    * Escape field / table name

line 262 is the line with that starts with return self::connection

Thanks so much in advance. Im novice at phpmyadmin

<?php

  /**
  * This function holds open database connections and provides interface to them. It is also used
  * for SQL logging
  *
  * @version 1.0
  * @http://www.projectpier.org/
  */
  final class DB {
    
    /** ID of primary connection **/
    const PRIMARY_CONNECTION_ID = 'PRIMARY';
    
    /**
    * Collection of connections
    *
    * @var array
    */
    static private $connections = array();
    
    /**
    * ID of primary connection. This connection will be used if connection name is not suplied
    *
    * @var string
    */
    static private $primary_connection = self::PRIMARY_CONNECTION_ID;
    
    /**
    * SQL log
    *
    * @var array
    */
    static private $sql_log = array();
    
    /**
    * This function will return specific connection. If $connection_name is NULL primary connection will be used
    *
    * @access public
    * @param string $connection_name Connection name, if NULL primary connection will be used
    * @return AbstractDBAdapter
    */
    static function connection($connection_name = null) {
      if (is_null($connection_name)) {
        $connection_name = self::getPrimaryConnection();
      } // if
      return array_var(self::$connections, $connection_name);
    } // connection
    
    /**
    * Create new database connection
    *
    * @access public
    * @param string $adapter Adapter name (currently only mysql adapter is implemeted)
    * @param array $params Connection params
    * @param string $connection_name Name of the connection, if NULL default connection ID will be used
    * @return boolean
    * @throws FileDnxError
    * @throws DBAdapterDnx
    */
    static function connect($adapter, $params, $connection_name = null) {
      $connection_name = is_null($connection_name) || trim($connection_name) == '' ? 
        self::PRIMARY_CONNECTION_ID : 
        trim($connection_name);
        
      $adapter = self::connectAdapter($adapter, $params);
      if (($adapter instanceof AbstractDBAdapter) && $adapter->isConnected()) {
        self::$connections[$connection_name] = $adapter;
        return $adapter;
      } else {
        return null;
      } // if
      
    } // connect
    
    /**
    * This function will include adapter and try to connect. In case of error DBConnectError will be thrown
    *
    * @access public
    * @param string $adapter_name
    * @param array $params
    * @return AbstractDBAdapter
    * @throws DBAdapterDnx
    * @throws DBConnectError
    */
    private function connectAdapter($adapter_name, $params) {
      
      self::useAdapter($adapter_name);
      
      $adapter_class = self::getAdapterClass($adapter_name);
      if (!class_exists($adapter_class)) {
        throw new DBAdapterDnx($adapter_name, $adapter_class);
      } // if
      
      return new $adapter_class($params);
      
    } // connectAdapter
    
    /**
    * Figure out adapter location and include it
    *
    * @access public
    * @param string $adapter_class
    * @return void
    */
    private function useAdapter($adapter_name) {
      $adapter_class = self::getAdapterClass($adapter_name);
      $path = dirname(__FILE__) . "/adapters/$adapter_class.class.php";
      if (!is_readable($path)) {
        throw new FileDnxError($path);
      } // if
      include_once $path;
    } // useAdapter
    
    /**
    * Return class based on adapter name
    *
    * @access public
    * @param string $adapter_name
    * @return string
    */
    private function getAdapterClass($adapter_name) {
      return Inflector::camelize($adapter_name) . 'DBAdapter';
    } // getAdapterClass
    
    // ---------------------------------------------------
    //  Interface to primary adapter
    // ---------------------------------------------------
    
    /**
    * Try to execute query, ignore the result
    *
    * @access public
    * @param string $sql
    * @return true
    */
    static function attempt($sql) {
      $arguments = func_get_args();
      array_shift($arguments);
      $arguments = count($arguments) ? array_flat($arguments) : null;
      try {
        self::connection()->execute($sql, $arguments);
      } catch(Exception $e) {
      }
      return true;
    } // execute

    /**
    * Execute query and return result
    *
    * @access public
    * @param string $sql
    * @return DBResult
    * @throws DBQueryError
    */
    static function execute($sql) {
      $arguments = func_get_args();
      array_shift($arguments);
      $arguments = count($arguments) ? array_flat($arguments) : null;
      
      return self::connection()->execute($sql, $arguments);
    } // execute
    
    /**
    * Execute query and return first row from result
    *
    * @access public
    * @param string $sql
    * @return array
    * @throws DBQueryError
    */
    static function executeOne($sql) {
      $arguments = func_get_args();
      array_shift($arguments);
      $arguments = count($arguments) ? array_flat($arguments) : null;
      
      return self::connection()->executeOne($sql, $arguments);
    } // executeOne
    
    /**
    * Execute query and return all rows
    *
    * @access public
    * @param string $sql
    * @return array
    * @throws DBQueryError
    */
    static function executeAll($sql) {
      $arguments = func_get_args();
      array_shift($arguments);
      $arguments = count($arguments) ? array_flat($arguments) : null;
      
      return self::connection()->executeAll($sql, $arguments);
    } // executeAll
    
    /**
    * Start transaction
    *
    * @access public
    * @param void
    * @return boolean
    * @throws DBQueryError
    */
    static function beginWork() {
      return self::connection()->beginWork();
    } // beginWork
    
    /**
    * Commit transaction
    *
    * @access public
    * @param void
    * @return boolean
    * @throws DBQueryError
    */
    static function commit() {
      return self::connection()->commit();
    } // commit
    
    /**
    * Rollback transaction
    *
    * @access public
    * @param void
    * @return boolean
    * @throws DBQueryError
    */
    static function rollback() {
      return self::connection()->rollback();
    } // rollback
    
    /**
    * Return insert ID
    *
    * @access public
    * @param void
    * @return integer
    */
    static function lastInsertId() {
      return self::connection()->lastInsertId();
    } // lastInsertId
    
    /**
    * Return number of affected rows
    *
    * @access public
    * @param void
    * @return integer
    */
    static function affectedRows() {
      return self::connection()->affectedRows();
    } // affectedRows
    
    /**
    * Escape value
    *
    * @access public
    * @param mixed $value
    * @return string
    */
    static function escape($value) {
      return self::connection()->escapeValue($value);
    } // escape
    
    /**
    * Escape field / table name
    *
    * @access public
    * @param string $field
    * @return string
    */
    static function escapeField($field) {
      return self::connection()->escapeField($field);
    } // escapeField
    
    /**
    * Prepare string. Replace every '?' with matching escaped value
    *
    * @param string $sql
    * @param array $arguments Array of arguments
    * @return string
    */
    static function prepareString($sql, $arguments = null) {
      if (is_array($arguments) && count($arguments)) {
        foreach ($arguments as $argument) {
          $sql = str_replace_first('?', DB::escape($argument), $sql);
        } // foreach
      } // if
      return $sql;
    } // prepareString
    
    // ---------------------------------------------------
    //  Getters and setters
    // ---------------------------------------------------
    
    /**
    * Get primary_connection
    *
    * @access public
    * @param null
    * @return string
    */
    static function getPrimaryConnection() {
      return self::$primary_connection;
    } // getPrimaryConnection
    
    /**
    * Set primary_connection value
    *
    * @access public
    * @param string $value
    * @return null
    * @throws Error if connection does not exists
    */
    static function setPrimaryConnection($value) {
      if (!isset(self::$connections[$value])) {
        throw new Error("Connection '$value' does not exists");
      } // if
      self::$primary_connection = $value;
    } // setPrimaryConnection
    
    /**
    * Add query to SQL log
    *
    * @access public
    * @param string $sql
    * @return void
    */
    function addToSQLLog($sql) {
      self::$sql_log[] = $sql;
    } // addToSQLLog
    
    /**
    * Return SQL log
    *
    * @access public
    * @param void
    * @return array
    */
    function getSQLLog() {
      return self::$sql_log;
    } // getSQLLog
  
  } // DB

?>

17929_.pdf

Link to comment
Share on other sites

I strongly suspect your "create view" didn't do anything.  Firstly you can't create a view as an "INSERT", secondly you didn't give it a name, so I would expect it to fail without changing your database at all.

 

Was there anything else you did around the same time?

 

Also the general meaning of your error is "I am not connected to the database".  Because there is no db connection object, you get the error "Call to a member function escapeValue() on a non-object".  That's the issue you need to debug.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.