我尝试使用oop方式将汽车添加到数据库中。
有人可以在这里指出错误吗?如果我没有扩展连接类,我如何访问类中的方法?为什么对象pdo不能在类车中工作?
<?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();
?>
答案 0 :(得分:0)
试试这个:
public $pdo;
function addConnection()
{
try {
$this->pdo = new PDO("mysql:host=$this->servername;port=$this->port;dbname=$this->dbname", $this->username, $this->password);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$this->pdo->query("use $this->dbname");
}
function addCar()
{
$sql="INSERT INTO car(car_name,car_maker,car_colour,num_passanger)VALUES(:$param1,:$param2, :$param3,:$param4,:$param5)";
$stmt = $this->pdo->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();
}
答案 1 :(得分:0)
就像Daniel建议的那样,将$pdo
设为类connection
的公共属性,并让方法addConnection()
为此属性赋值:
public $pdo;
function addConnection()
{
try {
$this->pdo = new PDO("mysql:host=$this->servername;port=$this->port;dbname=$this->dbname", $this->username, $this->password);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$this->pdo->query("use $this->dbname");
}
现在在查询方法调用中访问此属性:
function addCar()
{
if(!isset($this->pdo))
$this->addConnection();
$sql="INSERT INTO car(car_name,car_maker,car_colour,num_passanger)VALUES(:$param1,:$param2, :$param3,:$param4,:$param5)";
$stmt = $this->pdo->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();
}
另一种方法是使用单独的PHP文件设置global
PDO对象,然后将此文件包含在任何其他必要文件中并使用公开的变量。
<?php
$servername = "localhost";
$username = "root";
$password = "mypassword";
$dbname = "carrental";
$port="3306";
$pdo=getConnected();
function getConnected(){
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();
}
return $pdo;
}
?>
请注意,您可以进一步将凭据抽象为credentials.php
文件,并将其包含在connections.php
中。
<?php
include_once('Connections.php');
class car
{
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()
{
$sql="INSERT INTO car(car_name,car_maker,car_colour,num_passanger)VALUES(:$param1,:$param2, :$param3,:$param4,:$param5)";
$stmt = $GLOBALS['pdo']->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();
?>
答案 2 :(得分:-1)
$这 - &GT; addConnection(); 试试
$this->conn = parent::addConnection();
$stmt = $this->conn->prepare($sql);