代码:
class mysql_db{
private $conn;
private function connect(){
if(isset($this->$conn)){
$this->$conn = new mysqli("localhost", "php_user", "php_pass", "db");
if($this->$conn->connect_error)
die("Connection failed: " . $this->$conn->connect_error);
}
}
private function disconnect(){
$this->$conn->close();
unset($this->$conn);
}
public function getContent(){
$this->connect();
$stmt = $this->$conn->prepare("SELECT * FROM content");
if($stmt->execute()){
$stmt->bind_result($id, $type, $title, $text, $inserted);
while($stmt->fetch()){
printf("%s %s %s %s %s\n",$id, $type, $title, $text, $inserted);
}
}
disconnect();
}
}
$db = new mysql_db();
$db->getContent();
结果:
Notice: Undefined variable: conn in db.php on line 5
Notice: Undefined variable: conn in db.php on line 18
Fatal error: Cannot access empty property in db.php on line 18
问题:
为什么会发生这种情况,以及如何解决?
目标:
创建连接类,同时限制用户仅使用PUBLIC 功能。保持对其内部数据库的所有访问权限。
编辑:
解决方案:It was only $ mistake.
答案 0 :(得分:1)
你不应该两次使用$ sign。
$this->$conn =
应该是
$this->conn =
$表示引用一个变量,如果你已经引用它,它不需要它两次,就会出错。
也可以在第18行使用它。 $this->conn->prepare("SELECT * FROM content");
使用$this->disconnect();
,因为它不是您的自定义功能。您需要断开当前对象,因此请使用$ this。