我尝试使用PDO显示数据。但我得到错误“试图获得非对象的属性”。
我有一个简单的脚本。
public function tampilUserId($user_id)
{
$sql = "SELECT $this->user.*, $this->provinsi.*
FROM $this->user
INNER JOIN $this->provinsi
ON $this->user.provinsi_id=$this->provinsi.provinsi_id
WHERE user_id=:user_id";
$stmt = db::prepare($sql);
$stmt->bindParam(':user_id', $user_id);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
这个
echo $results->email_user;
print_r($result);
结果
注意:尝试在第35行的C:\ xampp \ htdocs \ laporan_app \ user_views \ profile.php中获取非对象的属性 stdClass对象([user_id] => 45 [nama_dpn_user] => [nama_blkng_user] => [username_user] => adi [password_user] => $ 2y $ 10 $ p / 8gF5BcQSooQUKRlEAiPuOSy4o1RMeXA5Ul8GTZNYZi / 4wcOP3Ja [email_user] => adi@gmail.com [level_user] => mahasiswa [img_user] => [_dir_img_user] => [_size_img_user] => [provinsi_id] => [universitas_id] =>)
我试试这个剧本
echo $results['email_user'];
print_r($results);
结果
注意:未定义的索引:第35行的C:\ xampp \ htdocs \ laporan_app \ user_views \ profile.php中的email_user stdClass对象([user_id] => 45 [nama_dpn_user] => [nama_blkng_user] => [username_user] => adi [password_user] => $ 2y $ 10 $ p / 8gF5BcQSooQUKRlEAiPuOSy4o1RMeXA5Ul8GTZNYZi / 4wcOP3Ja [email_user] => adi@gmail.com [level_user] => mahasiswa [img_user] => [_dir_img_user] => [_size_img_user] => [provinsi_id] => [universitas_id] =>)
请帮助我,谢谢你。
答案 0 :(得分:0)
默迪卡! :d
如果您的SQL查询不包含任何错误,则会从数据库中成功提取其平均数据。所以在tampilUserId($user_id)
函数中,它从$stmt->fetchAll(PDO::FETCH_OBJ)
返回一组数组。如下所示:
/* Sample from Sakila database */
array (size=603)
0 =>
object(stdClass)[11]
public 'address_id' => string '1' (length=1)
public 'address' => string '47 MySakila Drive' (length=17)
public 'address2' => null
public 'district' => string 'Alberta' (length=7)
public 'city_id' => string '300' (length=3)
public 'postal_code' => string '' (length=0)
public 'phone' => string '' (length=0)
public 'last_update' => string '2014-09-25 22:30:27' (length=19)
1 =>
object(stdClass)[12]
public 'address_id' => string '2' (length=1)
public 'address' => string '28 MySQL Boulevard' (length=18)
public 'address2' => null
public 'district' => string 'QLD' (length=3)
public 'city_id' => string '576' (length=3)
public 'postal_code' => string '' (length=0)
public 'phone' => string '' (length=0)
public 'last_update' => string '2014-09-25 22:30:09' (length=19)
more elements...
您需要做的就是首先循环您的函数返回值,无论您何时调用它。你的案例的简短例子:
//I dont know you put it under class or not.
$data = $YourClass->tampilUserId($user_id);
foreach ($data as $item) {
echo $item->email_user);
}
注意:强>
您可以手动回显数据而无需循环及其不良操作,因为您不知道数组的长度。所以这只是痴迷。从你的情况来看,它会是。
$data = $YourClass->tampilUserId($user_id);
$data[0]->email_user; //If an object
$data[0]['email_user']; //If an array
您的查询存在疑问。变量
$this->user
对我来说看起来不像列名(不确定)如果是,那么你的查询错误很小。其次,正如你所说,结果是null
,它意味着错误或你搜索的数据不存在。我把这个示例运行内连接查询。
让我说我有2张桌子。第一个是 地址 ,第二个是 城市
| 地址表 |
| 城市表 |
所以你加入表的SQL查询(来自上图)应该是:
SELECT adr.address_id, adr.address, adr.district, adr.city_id, c.city_id,
c.city FROM address AS adr INNER JOIN city AS c ON adr.city_id = c.city_id
WHERE c.city_id = 300 #using city id
输出:
将它带到PHP
<?php
$pdo= new PDO('mysql:dbname=sakila;host=localhost:3306', 'user', password');
$city_id = 300; // manual set
$sql = 'SELECT adr.address_id, adr.address, adr.district, adr.city_id,
c.city_id, c.city FROM address AS adr INNER JOIN city AS c ON
adr.city_id = c.city_id WHERE c.city_id = :city_id';
$stmt = $_this->db->prepare($sql);
$stmt->bindParam(':city_id', $city_id);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_OBJ);
?>
var_dump($data)
给出结果:
很好,因为它来(object(stdClass))
所以我们可以循环通过数组&amp;然后使用->
符号访问它。
<?php
$i = 1;
foreach ($data as $d) {
echo '<dl>';
echo '<dt>Adress '.$i++.':</dt>';
echo '<li>Address id: '.$d->address_id.'</li>';
echo '<li>Address: '.$d->address.'</li>';
echo '<li>District: '.$d->district.'</li>';
echo '<li>City id: '.$d->city_id.'</li>';
echo '<li>City name: '.$d->city.'</li>';
echo '</dl>';
}
?>
浏览器中的结果:
希望这能解决您的问题。