ارسال پاسخ 
 
امتیاز موضوع:
  • 0 رأی - میانگین امیتازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
خطا در mysql_fetch_array
نویسنده پیام
parazitt آفلاین
عضو جدید
**

ارسال‌ها: 36
تاریخ عضویت: ۱۳۸۹ فروردين ۱
اعتبار: 2
تشکرها : 42
( 34 تشکر در 13 ارسال )
ارسال: #1
خطا در mysql_fetch_array
با سلام
هنگامی که نتایج یک query رو می خوام fetch کنم همچین خطایی می ده:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /var/www/roozbix/class.php on line 134
فقط مربوط به mysql_fetch_array نمی شه بلکه با mysql_fetch_assoc و mysql_num_rows هم که تست کردم همین ارور رو داد کد هم به شکل زیر می باشد
کد php:
$i=0;
        
$rslt=mysql_query("SELECT * FROM `rx_posts` LIMIT 0,30 ",$this->connection)|| die(mysql_error($this->connection));
        
$rows=mysql_fetch_array($rslt);
        foreach(
$rows as $row){
            foreach(
$this->members as $member){
                
$data[$i][$member]=$row[$member];
            }
            
$i++;
        }
        
$this->data=$data
برنامه های دیگه به راحتی کار می کنن
کانکشن تست شده با کاربر root کانکته دیتابیس هم سلکت شده این کوئری هم توی phpmyadmin تست کردم نتیجه درست داد
سیستم لینوکس-اوبونتو هست لوکال هاست هم LAMP دستی نصب شده
ممنون می شم کمک کنید
۱۳۸۹ شهريور ۲۴ ۰۳:۲۵ صبح
مشاهده وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
fzerorubigd آفلاین
عضو
***

ارسال‌ها: 61
تاریخ عضویت: ۱۳۸۹ شهريور ۱۸
اعتبار: 0
تشکرها : 6
( 60 تشکر در 36 ارسال )
ارسال: #2
RE: خطا در mysql_fetch_array
خوب مقصر خود شمایید Smile)‌
شما گفتید این یا اون (تو این خط:
کد php:
$rslt=mysql_query("SELECT * FROM `rx_posts` LIMIT 0,30 ",$this->connection)|| die(mysql_error($this->connection)); 
یعنی PHP فکر میکنه این یه OR هست و نتیجش همیشه بولینه.
به عبارتی، الان مشکل قاطی شدن اولویت اجرای عملگرهاست، الان || قبل از = عمل میکنه. اولی درست اجرا میشه، PHP نمیره دنبال دومی، (یه جورایی میانبر میزنه برای سرعت بیشتر) و نتیجه || هم یا true هست یا false

راه حل ساده حذف || به بعد هستش. چون اصلا قرار نیست پیش بیاد Smile کوئری درسته چه دلیلی داره پیش بیاد؟ این خطا نباید در زمان انتشار کار پیش بیاد اگه از الان خودت مشکل سینتکس در کوئری ها نداشته باشی.

یادداشتهای بیت نیمسوز Big Grin
(آخرین ویرایش در این ارسال: ۱۳۸۹ شهريور ۲۴ ۰۸:۴۸ صبح، توسط fzerorubigd. Edit Reason: )
۱۳۸۹ شهريور ۲۴ ۰۸:۴۲ صبح
مشاهده وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
 تشکر شده توسط : hosseintdk775
admin آفلاین
وحید سهرابلو
*******

ارسال‌ها: 4,180
تاریخ عضویت: ۱۳۸۷ آذر ۲۴
اعتبار: 48
تشکرها : 987
( 3881 تشکر در 2217 ارسال )
ارسال: #3
RE: خطا در mysql_fetch_array
به جای || همون OR بزار ببین درست میشه
نباید مشکلی داشته باشه
اگر اخطار دیتابیسی بده باید die انجام بشه
۱۳۸۹ شهريور ۲۴ ۱۰:۱۷ صبح
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
fzerorubigd آفلاین
عضو
***

ارسال‌ها: 61
تاریخ عضویت: ۱۳۸۹ شهريور ۱۸
اعتبار: 0
تشکرها : 6
( 60 تشکر در 36 ارسال )
ارسال: #4
RE: خطا در mysql_fetch_array
نه .
این اصلا نوشتنش به این صورت درست نیست، چه با OR چه با پایپ. شاید با پرانتز درست بشه البته ، ولی اینطوری شما با اولویت اپراتورها روبرویی، و طبق معمول || از مساوی اولویت بیشتری داره، بنابراین OR یا || اول اجرا میشه، نتیجه اون برمیگرده به متغیر.
Type Juggling توی PHP این اشتباهات رو باعث میشه، بازگشتی تابع mysql_query یه مقدار mixed هستش، اون که برمیگرده (و در این مورد یه Resource میشه) به واسطه این قابلیت PHP به true تفسیر میشه. میشه یه چیزی تو مایه های این :
کد php:
$vartrue || anyfunction() 
و چون یه طرف true هستش، PHP اصلا تابع رو امتحان نمیکنه چون نتیجه اون تابع اصولا مهم نیست و true بودن اولش کافیه.
من نمیدونم اصلا لزومی درباره استفاده این روش برای تابع mysql_query هست؟ چون این حالت فقط برای زمانی مفید هستش که خطایی رخ بده (مثلا تو کوئری مشکل دستوری باشه) که قاعدتا نباید پیش بیاد.
تازه در صورتی که این تابع false برگردونه(که توی راهنما اشاره شده) هم این موضوع خطرسازه و باعث میشه که برنامه با die خاتمه پیدا کنه.

(۱۳۸۹ شهريور ۲۴ ۱۰:۱۷ صبح)admin نوشته شده توسط:  به جای || همون OR بزار ببین درست میشه
نباید مشکلی داشته باشه
اگر اخطار دیتابیسی بده باید die انجام بشه

یادداشتهای بیت نیمسوز Big Grin
۱۳۸۹ شهريور ۲۴ ۱۱:۴۳ صبح
مشاهده وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
admin آفلاین
وحید سهرابلو
*******

ارسال‌ها: 4,180
تاریخ عضویت: ۱۳۸۷ آذر ۲۴
اعتبار: 48
تشکرها : 987
( 3881 تشکر در 2217 ارسال )
ارسال: #5
RE: خطا در mysql_fetch_array
نه دیگه پس یکی از جالبترین ترفند های برنامه نویسی رو نمی دونید
توی مثال
این مثال رو ببینید
کد php:
$res="vahid";
$res2= ($res OR "salam");

echo 
$res2

خب این مثال دقیقا همون چیزی هست که شما میگید مقدار بولین داخل $res2 قرار میگیره.
اما
این مثال رو تست کنید
کد php:
$res="vahid";
$res2$res OR "salam";

echo 
$res2

این بار دیگه مقدار بولین نیست. چون این OR اصلا اون OR بالا نیست.
اینجا مقدار $res یه همون vahid هست.
البته مشکل دوستمون همون که گفتم هست . باید به جای || از OR استفاده کنه چون این OR نه اون OR شرطی هست. البته درسته استفاده از این روش میشه گفت صحیح نیست و بهتره از اکسپشن ها استفاده بشه. اما باید کار کنه.
۱۳۸۹ شهريور ۲۴ ۰۱:۲۵ عصر
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
 تشکر شده توسط : fzerorubigd shgninc sasan
admin آفلاین
وحید سهرابلو
*******

ارسال‌ها: 4,180
تاریخ عضویت: ۱۳۸۷ آذر ۲۴
اعتبار: 48
تشکرها : 987
( 3881 تشکر در 2217 ارسال )
ارسال: #6
RE: خطا در mysql_fetch_array
اجرا نشدن یه کوئری همیشه خطرناک هست ( در صورتی که اخطار بده). توی بیشتر موارد صلاح به این هست که اجرای برنامه ادامه پیدا نکنه.
۱۳۸۹ شهريور ۲۴ ۰۱:۲۷ عصر
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
fzerorubigd آفلاین
عضو
***

ارسال‌ها: 61
تاریخ عضویت: ۱۳۸۹ شهريور ۱۸
اعتبار: 0
تشکرها : 6
( 60 تشکر در 36 ارسال )
ارسال: #7
RE: خطا در mysql_fetch_array
بازم قضیه برمیگرده به اولویت عملگرها، تفاوت دو تا OR و || فقط همینه : http://php.net/manual/en/language.operat...edence.php
اگه دقت کنید or پایینتر از = قرار گرفته، و با یه پرانتز هم همین میشه، ولی اینکه OR با || فرق داره هنوزم میگم جز تفاوت اولویتی هیچ فرقی نداره، و اونکه شما پرانتز گذاشتی همینه.
اینم جمله ای از راهنمای PHP :
The reason for the two different variations of "and" and "or" operators is that they operate at different precedences.
بنابراین لزوما این جمله درست نیست :

--البته مشکل دوستمون همون که گفتم هست . باید به جای || از OR استفاده کنه چون این OR نه اون OR شرطی هست.

چون این OR دقیقا همون OR شرطی هست فقط با اولویت کمتر. و "باید" هم مناسب نیست، میشه از پرانتز استفاده کرد با همون ||

یادداشتهای بیت نیمسوز Big Grin
۱۳۸۹ شهريور ۲۴ ۰۲:۲۴ عصر
مشاهده وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
admin آفلاین
وحید سهرابلو
*******

ارسال‌ها: 4,180
تاریخ عضویت: ۱۳۸۷ آذر ۲۴
اعتبار: 48
تشکرها : 987
( 3881 تشکر در 2217 ارسال )
ارسال: #8
RE: خطا در mysql_fetch_array
owwwwwwww
نمی دونستم این رفتار به خاطر اولیتشون هست
ممنون
من که از این روش خیلی استفاده می کنم. کلا خیلی کدنویسی و کد خوانی رو راحتتر می کنه
۱۳۸۹ شهريور ۲۴ ۰۲:۵۶ عصر
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
admin آفلاین
وحید سهرابلو
*******

ارسال‌ها: 4,180
تاریخ عضویت: ۱۳۸۷ آذر ۲۴
اعتبار: 48
تشکرها : 987
( 3881 تشکر در 2217 ارسال )
ارسال: #9
RE: خطا در mysql_fetch_array
از پرانتر هم نمیشه استفاده کرد دیگه. چه جوری منظورت هست؟
۱۳۸۹ شهريور ۲۴ ۰۲:۵۷ عصر
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
fzerorubigd آفلاین
عضو
***

ارسال‌ها: 61
تاریخ عضویت: ۱۳۸۹ شهريور ۱۸
اعتبار: 0
تشکرها : 6
( 60 تشکر در 36 ارسال )
ارسال: #10
RE: خطا در mysql_fetch_array
کد php:
($rslt=mysql_query("SELECT * FROM `adv_menu` LIMIT 0,30 ")) || die(mysql_error()); 

راستشو بخوای منم اینو تازه فهمیدم Smile) ترم پیش یکی تو سوالام این ایراد رو گرفته بود Smile)

یادداشتهای بیت نیمسوز Big Grin
۱۳۸۹ شهريور ۲۴ ۰۳:۵۸ عصر
مشاهده وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان
تماس با ماiranphp.orgبازگشت به بالابازگشت به محتوا بایگانیپیوند سایتی RSS