• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در oop و pdo
#1
با سلام

دارم یک کلاس دیتابیس با pdo به صورت oop می نویسم

واسم یه مشکل عجب پیش اومده

کد:
class db{


    private $pdo;
        
    private $host='localhost';
    private $user='root';
    private $password='';
    private $database='tttt';
    
    private $stmt;
    private $err_msg;
    
    
    public function __construct()
    {
        $this->open_connection();
    }
    
    
    
    
    
    public function open_connection()
    {    
        try
        {
            $this->pdo=@new PDO("mysql:host=$this->host;dbname=$this->database;charset=utf8",$this->user,$this->password);
              

                
            return true;                
            
        }
    
        catch(PDOException $e)
        {    
            $this->err_msg="Error : ". $e->getMessage();
            return false;
        }
            
    }


public function prepare($sql,$param)
    {        
        try
        {
            $stmt=$this->pdo->prepare($sql);                
            if($stmt->execute($param))
            {
                $this->stmt=$stmt;
                return true;
            }
                
        }
        catch(PDOException $e)
        {        
            $this->err_msg="Error : ". $e->getMessage();            
            return false;
        }        
    }

حالا وقتی از کلاس نمونه میسازیم
کد:
$rr=new db;




$bb=$rr->prepare("UPDATE MENU set label=?,link=?,sort=? where id>?",array("test","linktest","2",5));






echo $bb->fetchAll();

چرا تو متغییر bb به متدهای stmt مثل fetchall و بقیه دسترسی داریم ؟؟؟؟
مگر نباید متغییر bb ما فقط true یا false باشه ؟؟؟؟
  پاسخ
تشکر شده توسط :
#2
.سلام
نتیجه اجرای من :
کد پی‌اچ‌پی:
Fatal errorCall to a member function fetchAll() on a non-object in /var/www/html/test/a.php on line 74 
فقط true/false برگشت می ده ! البته اگر if اجرا نشه هیچی برگشت نمی ده.
  پاسخ
تشکر شده توسط :
#3
واسه منم همین پیام رو نشون میده ولی چرا متدها رو پس از bb-> نشون میده ؟؟؟

یه سوال دیگه اینکه catch چه موقعی اجرا میشه ؟؟
چون زمانی که من در تابع فوق
کد:
public function prepare($sql,$param)
یه فرمان اشتباه میدم یا حتی پارامتر رو به غلط میدم catch عمل نمیکنه
  پاسخ
تشکر شده توسط :
#4
.اگه منظورت اینه که IDE بعد bb متدها رو نشون می ده خب این می تونه یه اشکال IDE باشه و ربطی به php نداره.
catche برای execute اجرا نمی شه چون فقط t/f برمیگردونه ولی برای prepare اگه error_reporting غیر فعال نباشه اجرا می شه مثلا کد زیر رو تست کن :
کد پی‌اچ‌پی:
$bb=$rr->prepare("UPDATE MENU set label=?,link=,sort=? where id>?",array("test","linktest","2",5)); 
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان