PHP:未选择任何数据库
我的WAMP(PHP5.5.12,MySQL 5.6.17)中有一个奇怪的错误 主要错误是:未选择任何数据库。 这里有两个数据库表: 城市:id,城市 及 事件(此处不包括某些字段):id、eventHeader、cityID 这是我的代码。 这个函数显示所有事件,但在数据库中city被写为cityID,因此我有另一个函数必须将cityID转换为city namePHP:未选择任何数据库,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
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'
。配置文件中描述的用户已授予对此数据库的访问权限…使用userroot
时也会发生同样的情况此解决方案非常有效,感谢!但是我仍然不知道为什么第二种方法不想连接:(也许我应该考虑重新安装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();