致命错误:调用未定义的方法mysqli :: sql_query()

时间:2016-10-26 12:38:31

标签: php mysqli phpbb3

我正在使用PHPBB3 3.0.12,我有一个脚本可以自动登录,如下所述:

phpBB3 auto-login

这是我的剧本

<?php

login();

function login(){

  define('IN_PHPBB', true);

  $phpbb_root_path = pathNLP() . 'forum/'; //the path to your phpbb relative to this script
  $phpEx = substr(strrchr(__FILE__, '.'), 1);
  include($phpbb_root_path . "common.php"); ////the path to your phpbb relative to this script
  include($phpbb_root_path . "includes/functions_user.php");

  // Start session management
  $user->session_begin();
  $auth->acl($user->data);
  $user->setup();

  $username = "testuser"; $password = "1";
  if(isset($username) && isset($password))
  {
    $result=$auth->login($username, $password, true);

    if ($result['status'] == LOGIN_SUCCESS) {
      echo "You're logged in";
    }
  }
}

这曾经在我的webhoster上工作。我正在使用XAMPP在我的本地PC上尝试此脚本,但是我收到以下错误:

Fatal error: Call to undefined method mysqli::sql_query() in /home/adam/www/mysite/forum/includes/cache.php on line 51

实际上,在cache.php的第51行,我找到了命令sql_query

    global $db
    // ...
    $sql = 'SELECT config_name, config_value, is_dynamic
        FROM ' . CONFIG_TABLE;
    $result = $db->sql_query($sql); //<--line 51

我认为问题是global $db行,我猜$db不应该是mysqli对象,因为它没有sql_query方法。根据{{​​3}}的引用(感谢Patrik Q的链接),有人说:

  

phpbb3中存在设计错误。他们使用全球$ db EVERYWHERE   而不是使用单例作为db对象。在我的情况下的问题   是我把这个代码放在一个类中。 [...]在我的情况下我   只是将该代码移到了类之外并复制了该类中的变量   构造

由于这个引用,我试图将脚本调用到一个函数内 - 而且令我惊讶的是它有效!但是,我需要从函数中调用它。我不明白为什么global $db在将它放入函数时会出现问题。如何使脚本在函数内部工作?这是工作代码:

<?php

  define('IN_PHPBB', true);

  $phpbb_root_path = pathNLP() . 'forum/'; //the path to your phpbb relative to this script
  $phpEx = substr(strrchr(__FILE__, '.'), 1);
  include($phpbb_root_path . "common.php"); ////the path to your phpbb relative to this script
  include($phpbb_root_path . "includes/functions_user.php");

  // Start session management
  $user->session_begin();
  $auth->acl($user->data);
  $user->setup();

  $username = "testuser"; $password = "1";
  if(isset($username) && isset($password))
  {
    $result=$auth->login($username, $password, true);

    if ($result['status'] == LOGIN_SUCCESS) {
      echo "You're logged in";
    }
  }

如何在方法中使用此脚本?

0 个答案:

没有答案