سوال همه چیرو میرسونه
ولی یه توضیح هم میدم این دو تابع روی سرور کدومشون بیشترین پراسس رو دارن.
سوال همه چیرو میرسونه
ولی یه توضیح هم میدم این دو تابع روی سرور کدومشون بیشترین پراسس رو دارن.
Last edited by David.Jn; 27-01-2009 at 20:35.
داوود جان گمونم سوء تفاهم شده!
این دو تا ربطی به هم ندارن که بشه مقایسه کرد.
اولی میاد داده های اون سطری از ریسورس استخراج شده از دیتابیس رو که پویینتر در اون سطره به صورت یک آرایه بر میگردونه
دومی هم تعداد سطرهای دیتابیس رو که آخرین کوئری فرستاده شده به دیتابیس روی اونا اثر گذاشته بر میگردونه
داوود جان گمونم سوء تفاهم شده!
این دو تا ربطی به هم ندارن که بشه مقایسه کرد.
اولی میاد داده های اون سطری از ریسورس استخراج شده از دیتابیس رو که پویینتر در اون سطره به صورت یک آرایه بر میگردونه
دومی هم تعداد سطرهای دیتابیس رو که آخرین کوئری فرستاده شده به دیتابیس روی اونا اثر گذاشته بر میگردونه
ممنونداوود جان گمونم سوء تفاهم شده!
این دو تا ربطی به هم ندارن که بشه مقایسه کرد.
اولی میاد داده های اون سطری از ریسورس استخراج شده از دیتابیس رو که پویینتر در اون سطره به صورت یک آرایه بر میگردونه
دومی هم تعداد سطرهای دیتابیس رو که آخرین کوئری فرستاده شده به دیتابیس روی اونا اثر گذاشته بر میگردونه
نه بابا سوء تفاهم کیلو چنده
میدونم هیچ ربطی به هم ندارن ولی تو یه جایی مثل هم کار میکنن
مثل فهمیدن اینکه آیا کوئری گرقته شده خروجی داشته یا نه(خروجیش یدونه باشه نه آرایه چندتایی مثل سیستم ثبت نام کاربران برای فهمیدن اینکه کاربری با این نام ثبت شده یا نه)
خودم فکر میکنم mysql_fetch_row بیشتراز اون یکی پراسس داشته باشه (نمیدونم نظر شما چیه)
نه دیگه اینا فقط تو یه مورد میتونن با هم مشابه باشن (از نظر کاربرد) اونم برای مشخص کردن تعداد سطری هست که اینسرت میشه
وگرنه تو بقیه موارد نمیشه تعداد سطر رو از fetch_row مشخص کرد (اگرم بشه مثلاً با سلکت کردن اون موقع دیگه affected_rows مقداری رو برنمیگردونه)
توی دلیت و آپدیت هم که تعداد سطر رو فقط با affected_rows میشه مشخص کرد نه با شمردن خروجی! چون اصلاً خروجی قابل شمردن نداره
در کل استفاده از fetch_row اصلاً ربطی به مشخص کردن نتیجه کوئری نداره![]()
یاسر خداییش گرفتی ما رو؟!در کل استفاده از fetch_row اصلاً ربطی به مشخص کردن نتیجه کوئری نداره![]()
بابا من همه اینارو میدونم
میخوای یه تاپیک با هم بزنیم واسه آموزش توابع مربوط به mysql
من در کل میخوام بدونم fetch_row بیشترین پردازش سمت سرور داره یا affected_rows
اصلآ با نحوه استفاده یا جایی که استفاده میشه کاری ندارم.
حالا میخوام بهت نشون بدم که بعضی مواقع میشه واسه نتیجه کوئری هم از fetch_row استفاده کرد
تو فرض کن ما یه سیستم لاگین داریم
حالا واسه چک کردن اینکه آیا کاربری با این نام و با این پسورد وجود داره یا نه میشه بعد از کوئری گرفتن اینجوری نوشت که :
خوب این if میاد چک میکنه که آیا خروجی کوئری که یک آرایه هست مقداری داره یا تهیکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا با affect:
حتی با تابع mysql_num_row هم میشه این کار رو انجام دادکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Last edited by David.Jn; 29-01-2009 at 23:25.
خوب عزیز دل برادر من که گفتم فقط تو یه مورد میشه از fetch_row برای این که ببینیم نتیجه ای توی کوئری بوده یا نه استفاده کرد اون یه مورد هم فقط مقدار برگردونده شده از SELECT هست!
اصلاً هم کار fetch_row این نیست که نتیجه رو مشخص کنه. کاری که میکنه اینه که در صورتی که توی سطری که پویینتر ریسورس گرفته شده از دیتابیس قرار داره یک سطر از اطلاعات وجود داشته باشه، اون سطر رو به صورت یک آرایه استخراج میکنه در غیر این صورت هم false بر میگردونه! در ضمن پویینتر رو هم بعد از هر بار fetch کردن یکی جلو میبره!
حالا اون شرطی هم که نوشتی میاد اون آرایه رو تبدیل میکنه به بولین و اون مقدار بولی رو ارزیابی میکنه! یعنی کلی کار بیخوری این وسط انجام میشه! هم دیتابیس mysql رو میزاری سر کار و هم php رو
اولاً mysql مجبور میشه داده ها رو بخونه و برات بفرسته به php
ثانیاً php مجبوره اون سطر رو بخونه و از ریسورس تبدیل کنه به آرایه که حالا تعداد عضوهاشم بستگی به سلکتت داره! بعدشم مجبوره اون آرایه رو برای شرط تبدیل کنه به بولین!
در ضمن در مورد SELECT فکر نمیکنم affected_rows مقداری رو برگردونه ها!! آخه تغییری تو دیتابیس ایجاد نمیشه که بخواد تعداد سطرهای تحت تأثیر قرار گرفته رو برگردونه!
برای همچین کارایی اگه خواستی از طریق تعداد سطرها عمل کنی بهتره از mysql_num_rows استفاده کنی که دقیقاً تعداد سطرهای انتخاب شده رو بر میگردونه.
یا اینکه اصلاً نام کاربری رو بفرستی به mysql و کلمه عبور اون رو select کنی و تو php اونو با کلمه عبور وارد شده مقایسه کنی (من این روش رو بیشتر دوست دارم!)
یه راه دیگه هم اینه که نام کاربری و کلمه عبور رو بفرستی به دیتابیس و همونجا تعداد سطرهای موجود با اون مشخصات رو بشمری و فقط تعداد سطرها رو سلکت کنی (اینم روش بدی نیست) :
تو این روشها اونی که خودت میگفتی بیشتر از همه پدر سرور رو در میاره بعدش روش اولی هست که من گفتم. اون دو تای آخر به نظرم کمتر فشار بیاره اما بازم بستگی به استوریج انجینی هست که برای جدول انتخاب کردی و همینطور اینکه کدوم فیلدها ایندکس شده باشن!کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی من دیدم که بعضیا اینکار رو با fetch_row انجام دادن (^_^)خوب عزیز دل برادر من که گفتم فقط تو یه مورد میشه از fetch_row برای این که ببینیم نتیجه ای توی کوئری بوده یا نه استفاده کرد اون یه مورد هم فقط مقدار برگردونده شده از SELECT هست!
اصلاً هم کار fetch_row این نیست که نتیجه رو مشخص کنه. کاری که میکنه اینه که در صورتی که توی سطری که پویینتر ریسورس گرفته شده از دیتابیس قرار داره یک سطر از اطلاعات وجود داشته باشه، اون سطر رو به صورت یک آرایه استخراج میکنه در غیر این صورت هم false بر میگردونه! در ضمن پویینتر رو هم بعد از هر بار fetch کردن یکی جلو میبره!
حالا اون شرطی هم که نوشتی میاد اون آرایه رو تبدیل میکنه به بولین و اون مقدار بولی رو ارزیابی میکنه! یعنی کلی کار بیخوری این وسط انجام میشه! هم دیتابیس mysql رو میزاری سر کار و هم php رو
اولاً mysql مجبور میشه داده ها رو بخونه و برات بفرسته به php
ثانیاً php مجبوره اون سطر رو بخونه و از ریسورس تبدیل کنه به آرایه که حالا تعداد عضوهاشم بستگی به سلکتت داره! بعدشم مجبوره اون آرایه رو برای شرط تبدیل کنه به بولین!
پس پردازش mysql_fetch بیشتره . چون داره fetch میکنه.
اینجا به بچه ها باید بگیم که از این تابع برای عضو گیری نباید استفاده کنن.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)