PDA

نسخه کامل مشاهده نسخه کامل : فرق بین mysql_fetch_row و mysql_affected_rows در پراسس



David.Jn
27-01-2009, 20:28
سوال همه چیرو میرسونه
ولی یه توضیح هم میدم این دو تابع روی سرور کدومشون بیشترین پراسس رو دارن.

neopersia
28-01-2009, 00:05
داوود جان گمونم سوء تفاهم شده! :31:
این دو تا ربطی به هم ندارن که بشه مقایسه کرد.
اولی میاد داده های اون سطری از ریسورس استخراج شده از دیتابیس رو که پویینتر در اون سطره به صورت یک آرایه بر میگردونه
دومی هم تعداد سطرهای دیتابیس رو که آخرین کوئری فرستاده شده به دیتابیس روی اونا اثر گذاشته بر میگردونه

neopersia
28-01-2009, 00:05
داوود جان گمونم سوء تفاهم شده! :31:
این دو تا ربطی به هم ندارن که بشه مقایسه کرد.
اولی میاد داده های اون سطری از ریسورس استخراج شده از دیتابیس رو که پویینتر در اون سطره به صورت یک آرایه بر میگردونه
دومی هم تعداد سطرهای دیتابیس رو که آخرین کوئری فرستاده شده به دیتابیس روی اونا اثر گذاشته بر میگردونه

David.Jn
28-01-2009, 07:36
داوود جان گمونم سوء تفاهم شده! [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این دو تا ربطی به هم ندارن که بشه مقایسه کرد.
اولی میاد داده های اون سطری از ریسورس استخراج شده از دیتابیس رو که پویینتر در اون سطره به صورت یک آرایه بر میگردونه
دومی هم تعداد سطرهای دیتابیس رو که آخرین کوئری فرستاده شده به دیتابیس روی اونا اثر گذاشته بر میگردونه
ممنون
نه بابا سوء تفاهم کیلو چنده :دی
میدونم هیچ ربطی به هم ندارن ولی تو یه جایی مثل هم کار میکنن
مثل فهمیدن اینکه آیا کوئری گرقته شده خروجی داشته یا نه(خروجیش یدونه باشه نه آرایه چندتایی مثل سیستم ثبت نام کاربران برای فهمیدن اینکه کاربری با این نام ثبت شده یا نه)

خودم فکر میکنم mysql_fetch_row بیشتراز اون یکی پراسس داشته باشه (نمیدونم نظر شما چیه)

neopersia
28-01-2009, 23:49
نه دیگه اینا فقط تو یه مورد میتونن با هم مشابه باشن (از نظر کاربرد) اونم برای مشخص کردن تعداد سطری هست که اینسرت میشه
وگرنه تو بقیه موارد نمیشه تعداد سطر رو از fetch_row مشخص کرد (اگرم بشه مثلاً با سلکت کردن اون موقع دیگه affected_rows مقداری رو برنمیگردونه)
توی دلیت و آپدیت هم که تعداد سطر رو فقط با affected_rows میشه مشخص کرد نه با شمردن خروجی! چون اصلاً خروجی قابل شمردن نداره


در کل استفاده از fetch_row اصلاً ربطی به مشخص کردن نتیجه کوئری نداره :31:

David.Jn
29-01-2009, 23:15
در کل استفاده از fetch_row اصلاً ربطی به مشخص کردن نتیجه کوئری نداره [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]یاسر خداییش گرفتی ما رو؟!
بابا من همه اینارو میدونم
میخوای یه تاپیک با هم بزنیم واسه آموزش توابع مربوط به mysql :دی

من در کل میخوام بدونم fetch_row بیشترین پردازش سمت سرور داره یا affected_rows
اصلآ با نحوه استفاده یا جایی که استفاده میشه کاری ندارم.

حالا میخوام بهت نشون بدم که بعضی مواقع میشه واسه نتیجه کوئری هم از fetch_row استفاده کرد
تو فرض کن ما یه سیستم لاگین داریم
حالا واسه چک کردن اینکه آیا کاربری با این نام و با این پسورد وجود داره یا نه میشه بعد از کوئری گرفتن اینجوری نوشت که :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخوب این if میاد چک میکنه که آیا خروجی کوئری که یک آرایه هست مقداری داره یا تهی

حالا با affect:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدحتی با تابع mysql_num_row هم میشه این کار رو انجام داد

neopersia
30-01-2009, 06:42
خوب عزیز دل برادر من که گفتم فقط تو یه مورد میشه از fetch_row برای این که ببینیم نتیجه ای توی کوئری بوده یا نه استفاده کرد اون یه مورد هم فقط مقدار برگردونده شده از SELECT هست!
اصلاً هم کار fetch_row این نیست که نتیجه رو مشخص کنه. کاری که میکنه اینه که در صورتی که توی سطری که پویینتر ریسورس گرفته شده از دیتابیس قرار داره یک سطر از اطلاعات وجود داشته باشه، اون سطر رو به صورت یک آرایه استخراج میکنه در غیر این صورت هم false بر میگردونه! در ضمن پویینتر رو هم بعد از هر بار fetch کردن یکی جلو میبره!

حالا اون شرطی هم که نوشتی میاد اون آرایه رو تبدیل میکنه به بولین و اون مقدار بولی رو ارزیابی میکنه! یعنی کلی کار بیخوری این وسط انجام میشه! هم دیتابیس mysql رو میزاری سر کار و هم php رو :31:
اولاً mysql مجبور میشه داده ها رو بخونه و برات بفرسته به php
ثانیاً php مجبوره اون سطر رو بخونه و از ریسورس تبدیل کنه به آرایه که حالا تعداد عضوهاشم بستگی به سلکتت داره! بعدشم مجبوره اون آرایه رو برای شرط تبدیل کنه به بولین!

در ضمن در مورد SELECT فکر نمیکنم affected_rows مقداری رو برگردونه ها!! آخه تغییری تو دیتابیس ایجاد نمیشه که بخواد تعداد سطرهای تحت تأثیر قرار گرفته رو برگردونه!

برای همچین کارایی اگه خواستی از طریق تعداد سطرها عمل کنی بهتره از mysql_num_rows استفاده کنی که دقیقاً تعداد سطرهای انتخاب شده رو بر میگردونه.

یا اینکه اصلاً نام کاربری رو بفرستی به mysql و کلمه عبور اون رو select کنی و تو php اونو با کلمه عبور وارد شده مقایسه کنی (من این روش رو بیشتر دوست دارم!)

یه راه دیگه هم اینه که نام کاربری و کلمه عبور رو بفرستی به دیتابیس و همونجا تعداد سطرهای موجود با اون مشخصات رو بشمری و فقط تعداد سطرها رو سلکت کنی (اینم روش بدی نیست :31:) :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تو این روشها اونی که خودت میگفتی بیشتر از همه پدر سرور رو در میاره بعدش روش اولی هست که من گفتم. اون دو تای آخر به نظرم کمتر فشار بیاره اما بازم بستگی به استوریج انجینی هست که برای جدول انتخاب کردی و همینطور اینکه کدوم فیلدها ایندکس شده باشن!

David.Jn
30-01-2009, 11:08
خوب عزیز دل برادر من که گفتم فقط تو یه مورد میشه از fetch_row برای این که ببینیم نتیجه ای توی کوئری بوده یا نه استفاده کرد اون یه مورد هم فقط مقدار برگردونده شده از SELECT هست!
اصلاً هم کار fetch_row این نیست که نتیجه رو مشخص کنه. کاری که میکنه اینه که در صورتی که توی سطری که پویینتر ریسورس گرفته شده از دیتابیس قرار داره یک سطر از اطلاعات وجود داشته باشه، اون سطر رو به صورت یک آرایه استخراج میکنه در غیر این صورت هم false بر میگردونه! در ضمن پویینتر رو هم بعد از هر بار fetch کردن یکی جلو میبره!

حالا اون شرطی هم که نوشتی میاد اون آرایه رو تبدیل میکنه به بولین و اون مقدار بولی رو ارزیابی میکنه! یعنی کلی کار بیخوری این وسط انجام میشه! هم دیتابیس mysql رو میزاری سر کار و هم php رو
اولاً mysql مجبور میشه داده ها رو بخونه و برات بفرسته به php
ثانیاً php مجبوره اون سطر رو بخونه و از ریسورس تبدیل کنه به آرایه که حالا تعداد عضوهاشم بستگی به سلکتت داره! بعدشم مجبوره اون آرایه رو برای شرط تبدیل کنه به بولین!

ولی من دیدم که بعضیا اینکار رو با fetch_row انجام دادن (^_^)

پس پردازش mysql_fetch بیشتره . چون داره fetch میکنه.
اینجا به بچه ها باید بگیم که از این تابع برای عضو گیری نباید استفاده کنن.