• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل با درج اطلاعات در پایگاه داده mysql به وسیله PDO
#1
سلام دوستان عزیز
من تازه 2 3 روز هست که کار با PDO رو شروع کردم و هنوز این کلاس آشنایی ندارم.
من در یک پروژه نمرینی با استفاده از کلاس PDO سعی کردم عملیات های مربوط به بانک اطلاعاتی رو انجام بدم.
طبق روال همیشگی خودم دستورات SQL م رو با استفاده از کلاس مدیریت میکردم یعنی یک کلاس میسازم اعمال مربوط به اتصال در اون درج میکنم و کلاس های زیرین رو اختصاص می دم به عملیات ها و جداول. با دستورات MYSQL ساده مشکلی ندارم اما با استفاده از کلاس PDO دچار مشکل شدم.
اتصال به بانک به خوبی انجام میشه و خطایی تولید نمی کنه اما زمانی که قصد دارم اطلاعات رو درج کنم با خطای زیر مواجه میشم.
کد:
Call to a member function prepare() on a non-object in ...
توی سایت های مختلف هم گشتم اما واقعیت چون زبان انگلیسی من زیان خوب نیست چندان نتیجه ای نگرفتم. به نظر شما باید چه کار کنم کدی ازش خطا گرفته این هست:

کد پی‌اچ‌پی:
public function insertrecord($jobtitle){
        
$db parent::connect();
        
$sqlcode "INSERT INTO `jobs`(`jobtitle`, `numrecords`) VALUES (:title, :numrecord)";
        if(
$db != "error!"){
            
$sth $dbh->prepare($sqlcode);
            
$sth->execute(
                array(
                    
":title"=>$jobtitle,
                    
":numrecord"=>'0'
                
)
            );
        }else{
            return 
"error";
        }
    } 
از خط مروبط به Prepare.
  پاسخ
تشکر شده توسط :
#2
بابا این سایت های انگلیسی بی ربط هم شده یک حرفی مزنن شاید زد و درست شد شما که هیچی

ببینید من نحوه کارم به این شکل هست

کد پی‌اچ‌پی:
class cls_connection{
    public function 
connect(){
        
// دستورات
    
}
}

class 
cls_child extends cls_connection{
    public function 
insertrecord($jobtitle){
            
$db parent::connect();
            
$sqlcode "INSERT INTO `jobs`(`jobtitle`, `numrecords`) VALUES (:title, :numrecord)";
            if(
$db != "error!"){
                    
$sth $dbh->prepare($sqlcode);
                    
$sth->execute(
                      array(
                                
":title"=>$jobtitle,
                                
":numrecord"=>'0'
                        
)
                    );
                }else{
                        return 
"error";
                }
        } 


زمانی که میخوام اطلاعات رو درج کنم با خطای بالا مواجه می شوم.Huh
  پاسخ
تشکر شده توسط :
#3
شما داری تابع prepare رو از شی $dbh صدا میزنی،
ولی این شی $dbh رو تعریف نکردی جایی، اشتباه میکنم ؟
غایب
  پاسخ
تشکر شده توسط :
#4
(۱۳۹۲ دى ۱۳, ۰۲:۴۳ ق.ظ)Alaa نوشته: شما داری تابع prepare رو از شی $dbh صدا میزنی،
ولی این شی $dbh رو تعریف نکردی جایی، اشتباه میکنم ؟

سلام تشکر از جوابت عزیز
من $dbh رو به دستور کانکشن PDO نسبت دادم که در کلاس والد و در تابع connect هست من تابع connect رو با استفاده از parent::connect(); صدا زدم پس طبیعتاً باید شی $dbh رو اینجا بشناسه دیگه درسته؟!
  پاسخ
تشکر شده توسط :
#5
کل کلاست رو بذار ببینیم چیکار کردی .
این الان متغییر dbh اصلا جایی ست نکردی؟
global هم نکردی .
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : persianuser
#6
(۱۳۹۲ دى ۱۳, ۰۲:۵۶ ب.ظ)Reza نوشته: کل کلاست رو بذار ببینیم چیکار کردی .
این الان متغییر dbh اصلا جایی ست نکردی؟
global هم نکردی .

سلام بفرمایید. پیوست شد.

.php   database_class.php (اندازه 2.89 KB / تعداد دانلود: 4)
  پاسخ
تشکر شده توسط :
#7
همینطور که آقا رضا گفتن، متغیر $dbh رو یابد global تعریف کنی، فکر کنم مشکل حل میشه .
غایب
  پاسخ
تشکر شده توسط : persianuser
#8
(۱۳۹۲ دى ۱۳, ۰۳:۲۷ ب.ظ)Alaa نوشته: همینطور که آقا رضا گفتن، متغیر $dbh رو یابد global تعریف کنی، فکر کنم مشکل حل میشه .

من این کار رو انجام دادم امام باز هم همین خطا رو داد
در کلاس والد در تابع connect قبل از استفاده از متغییر $dbh به عنوان شی کلاس PDO کد global $dbh رو نوشته بودم اما نشد. اشتباه کردم؟!
  پاسخ
تشکر شده توسط :
#9
توی کلاس insertrecord، همون کدی که نوشتی رو اضافه کن، ببین میشه ؟

این مثالی که تو این صفحه است نگاه کن :
Call to a member function prepare() on a non-object? PDO? [closed]

انگیلیسی مهم نست، فقط نحوه تعریف کردن کلاس ها رو ببین .
غایب
  پاسخ
تشکر شده توسط :
#10
(۱۳۹۲ دى ۱۳, ۰۳:۴۹ ب.ظ)Alaa نوشته: توی کلاس insertrecord، همون کدی که نوشتی رو اضافه کن، ببین میشه ؟

این مثالی که تو این صفحه است نگاه کن :
Call to a member function prepare() on a non-object? PDO? [closed]

انگیلیسی مهم نست، فقط نحوه تعریف کردن کلاس ها رو ببین .

باز هم به نتیجه نرسیدم. یک سوال فنی در مورد همون لینکی که ارسال کردید این چطور میتونه درست باشه مگه وظیفه global این نیست که متغیری رو به وسیله اون عمومی کنیم تا بتونیم همه جای برنامه ازش استفاده کنیم پس این چطوریه که در اون متغیر رو در جای به گلوبال تبدیل کرده که باید مقدار رو دریافت بکنه ؟! ضمن اینکه اگر بخوایم مقداری رو به کلاس ارسال کنیم حتماً باید برایش یک شی ایجاد کنیم و تابع مربوطه امکان دریافت داده رو داشته باشه دیگه؟! درست نمیگم؟!
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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