OOP 的新手,尝试提取方法的结果并从数据库中显示数据.收到 500 错误



我在一个类中使用以下方法,并调用该方法需要格式化的地址。代码导致 500 错误。

如果我删除try/catch代码块,它可以很好地执行(但没有来自数据库的数据),如果我将 try/catch 块放在我的另一个页面并使用var_dump($result)它会显示数据库中的关联数组。

方法:

public function shippingAddress($user_id){
    try{
        $results = $db->prepare("SELECT address, address2, city, state, postal_code, country FROM addresses WHERE kf_user = ?");
        $results->bindParam(1, $user_id);
        $results->execute();
        $result = $results->fetch(PDO::FETCH_ASSOC);
    }catch(Exception $e){
        echo "Query failed, could not connect to database.";
        exit;
    }
    $this->street = $result['address'];
    $this->street2 = $result['address2'];
    $this->city = $result['city'];
    $this->state = $result['state'];
    $this->postal = $result['postal_code'];
    if(!empty($result['country'])):
        $this->country = $result['country'];
    endif;
    //compile variables into formatted address
    //street address        if address2 not set, don't include it.
    $output = $this->street . "<br/>";
    if(!empty($this->street2)) : 
        $output .= $this->street2 . "<br/>";
    endif;
    //city, state postal code
    $output .= $this->city . ", " . $this->state . " " . $this->postal . "<br/>";
    //country
    $output .= $this->country;
    //result
    return $output;
}

其他页面:

<?php
    include_once ('inc/class.address.inc');
?>
<html>
<head>
</head>
<body>
  <h1>Address:</h1>
<?php 
    $address = new Address;
?>
  <address><?php echo $address->shippingAddress(1); ?></address>
</body>
</html>

PHP 致命错误:在第 19 行的/Users/Jacques/Library/Containers/com.bitnami.mampstack/Data/app-5_4_9/apache2/htdocs/LowBidMe/inc/class.address.inc 中的非对象上调用成员函数 prepare()

看起来您尚未在当前范围内声明 $db 变量。因此,它不是"初始化"的。

请参阅:http://www.php.net/manual/en/language.variables.scope.php

查询数据库之前初始化数据库变量。

 $db = new PDO("mysql:host=". DB_HOST .";dbname=". DB_NAME .";port=". DB_PORT, DB_USER, DB_PASS);
try{
    $results = $db->prepare("SELECT address, address2, city, state, postal_code, country FROM addresses WHERE kf_user = ?");
    $results->bindParam(1, $user_id);

或者最好以自己的方法启动 db,如下所示:

private function setupDb(){
   $this->db = $db = new PDO("mysql:host=". DB_HOST .";dbname=". DB_NAME .";port=". DB_PORT, DB_USER, DB_PASS);
}

然后在您的方法中,您可以像这样调用数据库:

$this->db->prepare(QUERY);

试试这个:

conn.php

 $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
   $user = 'dbuser';
   $password = 'dbpass';
 try {
   $db = new PDO($dsn, $user, $password);
   } catch (PDOException $e) {
      echo 'Connection failed: ' . $e->getMessage();
     exit();
   }

在其他页面中:

public function shippingAddress($user_id){
    include('conn.php');
    try{
        $results = $db->prepare("SELECT address, address2, city, state, postal_code, country FROM addresses WHERE kf_user = ?");
        $results->bindParam(1, $user_id);
        $results->execute();
        $result = $results->fetch(PDO::FETCH_ASSOC);
    }catch(Exception $e){
        echo "Query failed, could not connect to database.";
        exit;
    }
    $this->street = $result['address'];
    $this->street2 = $result['address2'];
    $this->city = $result['city'];
    $this->state = $result['state'];
    $this->postal = $result['postal_code'];
    if(!empty($result['country'])):
        $this->country = $result['country'];
    endif;
    //compile variables into formatted address
    //street address        if address2 not set, don't include it.
    $output = $this->street . "<br/>";
    if(!empty($this->street2)) : 
        $output .= $this->street2 . "<br/>";
    endif;
    //city, state postal code
    $output .= $this->city . ", " . $this->state . " " . $this->postal . "<br/>";
    //country
    $output .= $this->country;
    //result
    return $output;
}

最新更新