PHP:未选择任何数据库

PHP:未选择任何数据库,php,mysql,Php,Mysql,我的WAMP(PHP5.5.12,MySQL 5.6.17)中有一个奇怪的错误 主要错误是:未选择任何数据库。 这里有两个数据库表: 城市:id,城市 及 事件(此处不包括某些字段):id、eventHeader、cityID 这是我的代码。 这个函数显示所有事件,但在数据库中city被写为cityID,因此我有另一个函数必须将cityID转换为city name public function viewEvents($conf) { // Connecting to DB with pa

我的WAMP(PHP5.5.12,MySQL 5.6.17)中有一个奇怪的错误

主要错误是:未选择任何数据库。 这里有两个数据库表:

城市:id,城市

事件(此处不包括某些字段):id、eventHeader、cityID

这是我的代码。 这个函数显示所有事件,但在数据库中city被写为cityID,因此我有另一个函数必须将cityID转换为city name

public function viewEvents($conf) {

  // Connecting to DB with parameters from config file;
  $mysqli = $this->dbConnect($conf);

  // quering...
  $query = "SELECT * FROM events";
  $result = $mysqli->query($query);

  while($row = mysqli_fetch_array($result)) {
    if($row['featured'] == 1) {
      $row['header'] = '<b>' . $row['header'] . '</b>';
    }

    // Getting City Name;
    $city = self::getCity($row['id']);

    // Echoing table with results here.
    echo '';
  }
  $result->free();
  $mysqli->close();
}
这是dbConnect($conf){


尽管我的代码有很多变化,但我还是得到了相同的错误:
未选择任何数据库
。是否有可能,因为第一种方法工作得很好,并且它们都使用相同的
dbConnect()

通常,在请求生命周期内最好只有一个连接,因此这可能对您有用:

static function dbConnect($conf)
{
    static $mysqli = null; 
    if ( $mysqli === null )
    {
        $mysqli = mysqli_connect($conf['db-host'], $conf['db-usr'], $conf['db-psw'], $conf['db-name']); 
    }
    return $mysqli; 
}

// Call this function like this:
$mysqli = self::dbConnect($conf); 
现在,如果您有一个可靠的方法返回配置参数,您甚至可以这样改进它,以避免每次都必须通过配置:

static function dbConnect()
{
    static $mysqli = null; 

    if ( $mysqli === null )
    {
        $conf = $this->getConf();
        $mysqli = mysqli_connect($conf['db-host'], $conf['db-usr'], $conf['db-psw'], $conf['db-name']); 
    }

    return $mysqli; 
}

// Call this function like this:
$mysqli = self::dbConnect(); 
这样,无论调用dbConnect()多少次,都将始终只使用一个到数据库的连接。 如果连接已经打开,它将返回它;否则它将打开连接,然后返回它

编辑:关于第二个连接无法工作的原因

viewEvents()
函数中,对
getCity()
的调用使用静态版本
self::getCity()
;而在
getCity()
函数中,有两个对对象方法的调用:
$this->getConf()
$this->dbConnect()


我建议将调用从
self::getCity()
更改为
viewEvents()中的
$this->getCity()
函数。

确认
$conf
具有正确的值。并且您已验证
$conf
包含第二个函数中的所有预期值?当然!因为它在第一个函数中工作。
mysqli\u查询(“使用”);
,或在
mysqli
构造中设置数据库,或使用
SELECT.*
好的,这就是我得到的:
SELECT命令拒绝给用户“”@'localhost'访问表'cities'
。配置文件中描述的用户已授予对此数据库的访问权限…使用user
root
时也会发生同样的情况此解决方案非常有效,感谢!但是我仍然不知道为什么第二种方法不想连接:(也许我应该考虑重新安装WAMP服务器…哦,等等!看看你调用GETSITY的方式:自已:GETCITY()。这是对类方法的静态调用,但是在方法中,你使用$THE-*GETCONFED)和$-----BdConnect()。。尝试更改$this->getCity()的self::getCity()
static function dbConnect($conf)
{
    static $mysqli = null; 
    if ( $mysqli === null )
    {
        $mysqli = mysqli_connect($conf['db-host'], $conf['db-usr'], $conf['db-psw'], $conf['db-name']); 
    }
    return $mysqli; 
}

// Call this function like this:
$mysqli = self::dbConnect($conf); 
static function dbConnect()
{
    static $mysqli = null; 

    if ( $mysqli === null )
    {
        $conf = $this->getConf();
        $mysqli = mysqli_connect($conf['db-host'], $conf['db-usr'], $conf['db-psw'], $conf['db-name']); 
    }

    return $mysqli; 
}

// Call this function like this:
$mysqli = self::dbConnect();