• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل این کد کجاست؟
#1
سلام دوستان،

خواهش می کنم دقت کنید و بگین که مشکل این کد کجاست که میگه مقداری که مثلا به mysql_fetch_array دادی قابل قبول نیست.

کد پی‌اچ‌پی:
    //Simple Querise
    
public function query $query )
    {
        if ( !
$this->connected $this->open();
        
$qdb = @mysql_query $query$this->db );
        
$this->query_id $qdb;
        if ( !
$qdb )
        {
            echo 
"<h1>عدم توانایی در اتصال به پس جرس جو</h1>, " .mysql_error $this->db );
        }
        return 
$qdb;
    }
    
    
//Super Queries
    
public function super_query $query )
    {
            
$this->query($query);
            
$rows = array();
            while ( 
$row $this->fetchAssoc() )
            {
                
$rows[] = $row;
            }
            
$this->freeResult();
            return 
$rows;
    }
    
    
//mysql_num_rows
    
public function numRows()
    {
        return 
mysql_num_rows $this->query_id );
    }
    
    
//mysql_fetch_assoc
    
public function fetchAssoc()
    {
        return 
mysql_fetch_assoc $this->query_id );
    }
    
    
//mysql_fetch_array
    
public function fetchArray()
    {
        return 
mysql_fetch_array $this->query_id );
    }
    
    
//mysql_free_result
    
public function freeResult()
    {
        return 
mysql_free_result $this->query_id );
    } 

من در تابع query مشخص کردم که query_id برابر اون query باشه اما باز خوانده نمیشه انگار!

همچنین لطف کنید بگین که آیا نیاز داره در کلا دیتابیس از تابع close برای بستن دیتابیس استفاده کنیم؟ یعنی از کد زیر حتما باید استفاده بشه؟ چون اصلا بکارم نمیاد.

کد پی‌اچ‌پی:
    //Close mySQL
    
public function close()
    {
        
$cdb = @mysql_close $this->db );
        if ( !
$cdb )
        {
            echo 
"<h1>عدم توانایی در بستن اتصال</h1>, " .mysql_error $this->db );
        }
        return 
$cdb;
    } 


ممنونم Angel
غایب
  پاسخ
تشکر شده توسط :
#2
سلام،
اولاً این خط if ( !$this->connected ) $this->open(); رو حذف کن. ایمن تره خودت مراحل اتصال و انتخاب Database رو انجام بدی. connect, open, query, close...
دوماً کل تابع رو میتونی اینطوری بنویسی:
کد پی‌اچ‌پی:
    public function query($query)
    {
        if(!
$this->connected): return((bool)false);
        endif;
        
$this->query_id= @mysql_query($query$this->db) or echo('<h1 dir="rtl">عدم توانایی در اجرای پرس و جو.</h1>, ' mysql_error($this->db));
    } 
سوماً Query که اجرا میکنی چیه؟ و خطا رو هم بنویس.
چهارماً همیشه Comment های توضیح رو از # یا // فاصله بده و Comment های کد رو بچسبون:
کد پی‌اچ‌پی:
# Close MySQL
// Close MySQL

#mysql_close();
//mysql_close() 

در مورد سوال دوم، نیازه. اون هم بدون Return مقدار.
کد پی‌اچ‌پی:
    // Close MySQL
    
public function close()
    {
        @
mysql_close($this->db) or or echo('<h1 dir="rtl">عدم توانایی در بستن اتصال.</h1>, ' mysql_error($this->db));
    } 
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط :
#3
از توضیحات اضافه ای که دادی خیلی ممنونم یوشا جان Heart واقعا بدردم خورد. حالا یک سوال اگر در مورد آخرین کدی که دادی return کنیم مشکلی داره؟
در رابطه با اون $this->connected هم من اینطوری تغییرش دادم. ببین درسته یا نه لطفا.

کد پی‌اچ‌پی:
    // You have to use this function to use of that queries do not have to anythings.
    
public function query $query )
    {
        
$this->db = @mysql_connectMS_HOSTNAMEMS_USERNAMEMS_PASSWORD );
        
$sdb = @mysql_select_dbMS_NAME );
        
$qdb = @mysql_query $query$this->db );
        if ( !
$qdb )
        {
            echo 
"<h1>عدم توانایی در اتصال به پس جرس جو</h1>, " .mysql_error $this->db );
        }
        return 
$qdb;
        
$this->query_id $qdb;
    } 

اما من هنوز جواب اصلیم رو نگرفتم. لطفا تابع super_query رو ببینید. این تابعی هست که توش تمام عملیات انجام میشه مثل mysql_fetch_array و ... . من میخوام یک تابع super داشته باشم که بعضی جاها بدرد میخوره و یکی هم ساده که باز دارم و سالم هم هست. اما اون super_query که نوشتم مشکل داره. لطفا مشکلش رو بگید. ممنون
غایب
  پاسخ
تشکر شده توسط :
#4
نقل قول:حالا یک سوال اگر در مورد آخرین کدی که دادی return کنیم مشکلی داره؟
نه، ولی احتیاجی نیست خروجی بده. هست بنظرت؟

نقل قول:در رابطه با اون $this->connected هم من اینطوری تغییرش دادم. ببین درسته یا نه لطفا.
درست هست ولی اصولی و بهینه نیست. اینطوری نیازی به if نداری:
کد پی‌اچ‌پی:
    $qdb= @mysql_query($query$this->db) or echo('<h1 dir="rtl">عدم توانایی در اجرای پس جرس جو.</h1>, ' mysql_error($this->db)); 

یک چیزه دیگه: بهتر نیست در صورت عدم اجرای Query بجای echo از exit یا return(false) استفاده کنی؟ چون آخرش $qdb رو Return کردی؟!

در مورد مشکل Super query، بهتره تابع
کد:
//mysql_fetch_assoc
    public function fetchAssoc()
    {
        return mysql_fetch_assoc ( $this->query_id );
    }
رو کلاً حذف کنی. چراکه mysql_fetch_array رو داری!
این رو جایگزین Super quiery بکن و امتحان کن:
کد پی‌اچ‌پی:
    // Super queries
    
public function super_query($query)
    {
        
$this->query($query);
        
$rows= array();
            while(
$row $this->fetchArray())
            {
                
$rows[]= $row;
            }
        
$this->freeResult();
        unset(
$query$row);
    return((array)
$rows);
    } 
Query و خطا رو اگر مشکل داشت اینجا بنویس...
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط :
#5
نقل قول: $qdb= @mysql_query($query, $this->db) or echo('<h1 dir="rtl">عدم توانایی در اجرای پس جرس جو.</h1>, ' . mysql_error($this->db));
اینی که دادی اشتباه هست یوشا جان. چون هم امتحان کردم و هم قبلا Big Grin - راستش خطا parse error میده و فکر کنم واسه این باشه که or echo بکار بردی وگرنه جای دیگش مشکلی نداره!

در رابطه با اون return false هم باید با if و else بکار ببرم چون با or return false خطا میگیره.

نقل قول:در مورد مشکل Super query، بهتره تابع
یوشا جان حالا من گذاشتم موردی نداره اما گفتم که چه خطایی میده! هیچ ربطی به عوض کردن نداره! مقداری که به query_id میره مشکل داره!

اون کدی هم که دادی امتحان کردم باز همونه

کد پی‌اچ‌پی:
Warningmysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\wamp\www\practice\engine\classes\mysql_class.php on line 91

Warning
mysql_free_result(): supplied argument is not a valid MySQL result resource in D:\wamp\www\practice\engine\classes\mysql_class.php on line 97 
غایب
  پاسخ
تشکر شده توسط :
#6
من اونایی که گفتم برای مثال هستش، قالب کارن. حالا خطای Synax/Parse هم شاید داشته باشن...
چرا گفتم، چون در واقع Query رو در هیچ قرار دادی!! الان query_id= null
جای این دو تا رو تغییر بده:
کد:
return $qdb;
        $this->query_id = $qdb;
به:
کد:
$this->query_id = $qdb;
   return $qdb;
چون بعد از return یعنی هیچی/Exit/حذف.
کل کلاس درستت اینجاست: http://forum.iranphp.org/thread-511-page-2.html
اونا رو هم نوشتم که توابعت رو درست کنی...
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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