我是php的新手,所以我有一个非常仔细研究的问题。我试着写一些能帮助我使用DB的类。此处编码:
<?php
class DbHelper{
private $databaseURL;
private $databaseUName;
private $databasePWord;
private $databaseName;
private $nameOfDbWithWorkers;
private $connection;
function __construct($dbURL, $dbUserName, $dbPword, $dbName, $nameOfDbWithWorkers){
$this->databaseURL = $dbURL;
$this->databaseUName = $dbUserName;
$this->databasePWord = $dbPword;
$this->databaseName = $dbName;
$this->nameOfDbWithWorkers = $nameOfDbWithWorkers;
}
function setConnectionToDb(){
$connection = mysql_connect($this->databaseURL,$this->databaseUName,$this->databasePWord) OR DIE("can't connect to DB");
mysql_select_db($this->databaseName, $connection)or die ("Error while connecting to database");
}
function getUser($login, $pass){
$query = "SELECT type FROM $this->nameOfDbWithWorkers WHERE login = '$login' and password = '$pass';";
$queryResult = $this->getDataFromDbByQuery($query);
echo $queryResult;
if ((mysql_affected_rows($connection) == 1)){
$meta = mysql_fetch_assoc($queryResult);
if ($meta['type']=='admin'){
return 'admin';
}
if ($meta['type']=='user'){
return 'user';
}
else{
return 'nomatch';
}
}
else{
return 'nomatch';
}
}
function getDataFromDbByQuery($query){
$this->setConnectionToDb();
$result = mysql_query($query);
mysql_close($connection);
return $result;
}
}
?>
我调用了getUser
方法,但在getUser
方法和getDataFromDbByQuery
中有一个问题-$connection = null
。为什么会这样?
因为一个简单变量总是局部的(除了使用global
使其全局,但不要习惯于此;)。你可能正在寻找的是一处房产。您已经定义了private $connection
,但只在方法中使用了$connection
,您没有使用它,而是试图访问未定义的局部变量
function setConnectionToDb(){
$this->connection = mysql_connect($this->databaseURL,$this->databaseUName,$this->databasePWord) OR DIE("can't connect to DB");
mysql_select_db($this->databaseName, $this->connection)or die ("Error while connecting to database");
}
//..
function getUser($login, $pass){
$query = "SELECT type FROM $this->nameOfDbWithWorkers WHERE login = '$login' and password = '$pass';";
$queryResult = $this->getDataFromDbByQuery($query);
echo $queryResult;
if ((mysql_affected_rows($this->connection) == 1)){
// ...
}
}
等等。只需将每个$connection
替换为$this->connection
即可。
尝试用$this->connection
替换$connection
。
$connection
指的是一个局部作用域的变量,即在当前所在的函数之外不可用的变量。$this->connection
指的是用private $connection
定义的类的成员变量。