我在一个类中使用以下方法,并调用该方法需要格式化的地址。代码导致 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;
}