1

我正在尝试创建一个“CD Store”程序,我想在数据库中存储信用卡详细信息,但我希望数据库引用我在其他地方创建的用户 ID。如何将参数从另一个对象传递给新对象?我试图编写代码,但我不断收到此错误

Fatal error: Call to a member function getId() on a non-object in applications/XAMPP/xamppfiles/htdocs/CDStore/creditCardAccess.php on line 36

我知道它可能没有被引用,并且 $user 变量在 netbeans 中显示为黄色。我不知道我会怎么做?任何指针将不胜感激。这是我的代码谢谢

<?php

class creditCardAccess {

protected $link;

public function __construct() {
    $host = "localhost";
    $username = "root";
    $password = "";
    $database = "CDStore";

    $dsn = "mysql:host=$host;dbname=$database";

    $this->link = new PDO($dsn, $username, $password);
    $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

public function __destruct() {
    $this->link = null;
}
public function insertCreditCard($creditCard) {
    if (!isset($creditCard) && $creditCard != null) {
        throw new Exception("Credit Card Required");
    }

    $sql = "INSERT INTO creditCards(cardType, cardName, cardNumber, cardExpiryDate, cardCCV, userID)"
            . "VALUES (:cardType, :cardName, :cardNumber, :cardExpiryDate, :cardCCV, :userID)";

    $params = array(
        'cardType' => $creditCard->getCardType(),
        'cardName' => $creditCard->getCardName(),
        'cardNumber' => $creditCard->getCardNumber(),
        'cardExpiryDate' => $creditCard->getCardExpiryDate(),
        'cardCCV' => $creditCard->getCardCCV(),
        'userID' => $user->getId()
    );

    $stmt = $this->link->prepare($sql);
    $status = $stmt->execute($params);
    if ($status != true) {
        $errorInfo = $stmt->errorInfo();
        throw new Exception("Could Not Add Credit Card: " . $errorInfo[2]);
    }

    $id = $this->link->lastInsertId('creditCard');
    $creditCard->setId($id);
}

}
?>

第 36 行是 'userID' => $user->getId()

4

2 回答 2

1

首先在此文件中包含您的用户类。然后在类中创建一个用户属性。在构造函数中创建用户类的实例。然后就可以使用用户类函数了。

<?php

require_once("user.class.php"); //the user management class path

class creditCardAccess {

protected $link;

var $user;

public function __construct() {
    $host = "localhost";
    $username = "root";
    $password = "";
    $database = "CDStore";

    $dsn = "mysql:host=$host;dbname=$database";

    $this->link = new PDO($dsn, $username, $password);
    $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $this->user = new User();
}

public function __destruct() {
    $this->link = null;
}
public function insertCreditCard($creditCard) {
    if (!isset($creditCard) && $creditCard != null) {
        throw new Exception("Credit Card Required");
    }

    $sql = "INSERT INTO creditCards(cardType, cardName, cardNumber, cardExpiryDate, cardCCV, userID)"
            . "VALUES (:cardType, :cardName, :cardNumber, :cardExpiryDate, :cardCCV, :userID)";

    $params = array(
        'cardType' => $creditCard->getCardType(),
        'cardName' => $creditCard->getCardName(),
        'cardNumber' => $creditCard->getCardNumber(),
        'cardExpiryDate' => $creditCard->getCardExpiryDate(),
        'cardCCV' => $creditCard->getCardCCV(),
        'userID' => $user->getId()
    );

    $stmt = $this->link->prepare($sql);
    $status = $stmt->execute($params);
    if ($status != true) {
        $errorInfo = $stmt->errorInfo();
        throw new Exception("Could Not Add Credit Card: " . $errorInfo[2]);
    }

    $id = $this->link->lastInsertId('creditCard');
    $creditCard->setId($id);
}

}
?>
于 2013-02-28T23:43:44.157 回答
1

您的 $user 对象应作为参数传递给函数,否则您将永远无法看到 $user

public function insertCreditCard($creditCard, $user) {
于 2013-02-28T23:46:33.793 回答