PHP OOP(PDO)的问题
我是PHP OOP新手,所以我在里面做了一个小游戏,让你猜一个数字。现在,如果你做对了,我想在数据库中添加一些分数 我试过很多方法让它工作,但就是不行。另外,由于我不明白的原因,它没有重新确认我的$db variabel。我在谷歌上搜索了好几个小时,但找不到它。所以请帮帮我^^ 当我获胜时,我得到的错误:PHP OOP(PDO)的问题,php,oop,pdo,Php,Oop,Pdo,我是PHP OOP新手,所以我在里面做了一个小游戏,让你猜一个数字。现在,如果你做对了,我想在数据库中添加一些分数 我试过很多方法让它工作,但就是不行。另外,由于我不明白的原因,它没有重新确认我的$db variabel。我在谷歌上搜索了好几个小时,但找不到它。所以请帮帮我^^ 当我获胜时,我得到的错误: Notice: Undefined variable: db in C:\xampp\htdocs\numbergame\class\game.php on line 14 Fatal er
Notice: Undefined variable: db in C:\xampp\htdocs\numbergame\class\game.php on line 14
Fatal error: Call to a member function execute() on a non-object in C:\xampp\htdocs\numbergame\class\game.php on line 14
DB.php:
<?php
try {
$db = new PDO('mysql:host=localhost;dbname=numbergame', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
?>
game.php:
<?php
include('/DB.php');
class game {
public $rand;
public $num;
public function __construct() {
$this->rand = mt_rand(1, 2);
}
public function addScore() {
$sql = "UPDATE user SET score = '1' WHERE name = 'Dieter'";
$db->execute($sql);
}
public function guess() {
$this->num = $_POST["num"];
if($this->num == $this->rand) {
echo "You won! With the number: ".$this->rand."<br />";
echo "Added score with 1";
$this->addScore();
} else {
echo "You lose! The number was: 1";
}
}
public function check() {
if($_SERVER['REQUEST_METHOD'] == "POST") {
$this->guess();
} else {
echo '<form action="index.php" method="POST">';
echo 'Guess a number between 1-10 <br />';
echo '<input type="text" name="num" ><br />';
echo '<input type="submit" value="go!">';
echo '</form>';
}
}
}
?>
您没有提到确切的问题是什么,但这是错误的:
public function addScore() {
$sql = "UPDATE user SET score = '1' WHERE name = 'Dieter'";
$db->execute($sql);
}
$db
未在方法的范围内定义,请参阅。在OOP中,您无权访问所有变量。因此,您必须将$db
var传递给对象
protected $_db;
public function __construct($db) {
$this->_db = $db;
...
}
public function addScore() {
$sql = "UPDATE user SET score = '1' WHERE name = 'Dieter'";
$this->_db->execute($sql);
}
将其传递给对象:
include('/DB.php');
$NumberGame = new game($db);
如果您在类中使用include,并最终得到类似的结果:
$db = new DB();
class Car
{
public function getCars()
{
return $db->query("SELECT * FROM cars");
}
}
方法getCars()
中的$db
变量完全未知-它不在方法(类)范围内
正确的方法(多种方法之一):
当你有这样的东西时:
class Car
{
public function __construct(DB $db)
{
$this->db = $db;
}
public function getCars()
{
return $this->db->query("SELECT * FROM cars");
}
}
您得到的错误是什么?在addScore()
中,$db
变量是如何变得可用的?它是变量范围。您在类中使用的是$db
,但其中没有定义它,因此您使用的是局部变量。这个问题似乎与主题无关,因为它是关于调试代码的。@redreggae:这是因为99%的问题都与主题无关。。。“为我调试”并不是专家的工作。这是IDE/编译器的工作。
$db = new DB();
$car = new Car($db);
print_r($car->getCars());
class Car
{
public function __construct(DB $db)
{
$this->db = $db;
}
public function getCars()
{
return $this->db->query("SELECT * FROM cars");
}
}