【发布时间】:2015-09-23 11:34:59
【问题描述】:
我正在尝试使用 oop 方式将汽车添加到数据库中。
有人能指出这里的错误吗?如果我不扩展连接类,我如何访问类中的方法?为什么对象pdo在类car中不起作用?
<?php
class connection
{
public $servername = "localhost";
public $username = "root";
public $password = "mypassword";
public $dbname = "carrental";
public $port="3306";
function addConnection()
{
try {
$pdo = new PDO("mysql:host=$this->servername;port=$this->port;dbname=$this->dbname", $this->username, $this->password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$pdo->query("use $this->dbname");
}
}
class car extends connection
{
public $name;
public $maker;
public $type;
public $colour;
public $passanger;
function __construct($param1,$param2,$param3,$param4,$param5)
{
$this->name=$param1;
$this->maker=$param2;
$this->type=$param3;
$this->colour=$param4;
$this->passanger=$param5;
echo "name is {$this->name}.Maker is {$this->maker}.";
}
function addCar()
{
$this->addConnection();
echo $this->username;
$sql="INSERT INTO car(car_name,car_maker,car_colour,num_passanger)VALUES(:$param1,:$param2, :$param3,:$param4,:$param5)";
$stmt = $this->prepare($sql);
$stmt->execute(array(
':param1'=>$this->name,
':param2'=>$this->maker,
':param3'=>$this->type,
':param4'=>$this->colour,
':param5'=>$this->passanger
));
echo "affected rows ".$stmt->rowCount();
}
}
$car1=new car("Honda Accord","Honda","4 wheeler","Red",5);
$car1->addCar();
?>
【问题讨论】:
-
创建
$pdo变量时没有任何反应。您应该将$pdo设为属性并访问它以进行查询。 -
实现了这样的逻辑,我宁愿把connection做成一个static class而不扩展它。您拥有的其他解决方案是在您的连接类中创建一个
$pdo object(但您很可能会在每次创建扩展类对象时重新调用并重新加载它),或者您可以设置addConnection()返回pdo object的函数。另外,我建议您对此类范围使用接口(或抽象类),因为您需要为查询创建某种“规则”。