“尝试获取非对象的属性”使用PDO进行内部联接

时间:2016-04-29 14:31:07

标签: php pdo

我尝试使用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] =>)

请帮助我,谢谢你。

1 个答案:

答案 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张桌子。第一个是 地址 ,第二个是 城市

| 地址表 |

Address table from Sakila database

| 城市表 |

enter image description here

所以你加入表的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

输出:

enter image description here

将它带到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)给出结果:

enter image description here

很好,因为它来(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>';
}
?>

浏览器中的结果:

Final output

希望这能解决您的问题。