PDA

View Full Version : حرفه ای: دریافت همه سطرهای جدول با استفاده از mysqli



movahedian1
یک شنبه 15 آبان 1390, 22:49 عصر
سلام
برای دریافت همه سطرهای یک جدول با استفاده از نام فیلدها به صورت مستقیم از طریق mysqli آیا راهی وجود دارد؟
این توابع تنها یک سطر یا همون آخرین سطر رو برمیگردونند نه همه سطرها رو:


mysqli_fetch_array

mysqli_fetch_assoc
این تابع هم که ظاهرا کار نمیکنه:


mysqli_fetch_all

البته میشه با یک حلقه اضافی مثل زیر همه سطرها رو گرفت:



while($row = mysqli_fetch_array($result)){
$rows[] = $row;
}

foreach($rows as $row){
echo $row['field name'];
}


اما آیا راه حل ساده تر و مستقیم تری مثل حالت استفاده از شماره فیلدها وجود نداره؟
مثل این:



while($row = mysqli_fetch_row($result)){
echo $row[1];
}


البته به جای شماره فیلد، اسم فیلد باشه!

باتشکر

persian-boy
یک شنبه 15 آبان 1390, 23:19 عصر
یعنی میخواین همه سطر هایی که مثلا cat اونا 1 هست سلکت شن ؟ یا منظورتون از "ا استفاده از نام فیلدها " چیه ؟

iker-casillas
دوشنبه 16 آبان 1390, 00:12 صبح
یکم منظورت رو گنگ گفتی
من رو چیزی که فهمیدم برات توضیح می دم

فرض کن یه جدول مثل این فایل ضمیمه شده داریم
77518
برای خوندن داده هاش با mysqli از تکه کد زیر می تونیم استفاده کنیم

$counter = 0;
while ($row = mysqli_fetch_array($rs)) {
$name[$counter] = $row['name'];
$address[$counter] = $row['address'];
$lat[$counter] = $row['lat'];
$lng[$counter] = $row['lng'];
$type[$counter] = $row['type'];
$counter++;
}

با این کد مقادیر سطر های دیتابیس (هر سطرش) توی یک اندیس آرایه ریخته می شه
اگه درست نفهمیدم منظورت رو بیشتر توضیح بده تا بتونم درست بهت توضیح بدم

movahedian1
دوشنبه 16 آبان 1390, 00:44 صبح
یعنی میخواین همه سطر هایی که مثلا cat اونا 1 هست سلکت شن ؟ یا منظورتون از "ا استفاده از نام فیلدها " چیه ؟
منظور اینه که به جای استفاده از شماره:

$row[1]
از اسم فیلد استفاده بشه:

$row['test']

و همزمان همه اطلاعات همه سطرها رو هم برگردونه



یکم منظورت رو گنگ گفتی
من رو چیزی که فهمیدم برات توضیح می دم

فرض کن یه جدول مثل این فایل ضمیمه شده داریم
http://barnamenevis.org/attachment.php?attachmentid=77518&d=1320613423
برای خوندن داده هاش با mysqli از تکه کد زیر می تونیم استفاده کنیم
1
2
3
4
5
6
7
8
9
$counter = 0;
while ($row = mysqli_fetch_array($rs)) {
$name[$counter] = $row['name'];
$address[$counter] = $row['address'];
$lat[$counter] = $row['lat'];
$lng[$counter] = $row['lng'];
$type[$counter] = $row['type'];
$counter++;
}




با این کد مقادیر سطر های دیتابیس (هر سطرش) توی یک اندیس آرایه ریخته می شه
اگه درست نفهمیدم منظورت رو بیشتر توضیح بده تا بتونم درست بهت توضیح بدم


این سیستم رو امتحان کردم باز هم فقط یک سطر رو بر می گردونه، مثلا در این مورد فکر میکنم فقط tehrancity رو برگردونه، منظورم این بود که با یک while همه سطرها رو برگردونه

امیدوارم درست منظورم رو گفته باشم

باتشکر از همه

pejman_view
دوشنبه 16 آبان 1390, 15:13 عصر
سلام

اگر منظورتون رو درست فهمیده باشم و همینطور بقیه دوستان توضیح دادند من هم در تکمیل حرف بقیه دوستان یک توضیح مختصری در مورد این کدها می نویسم.
خودم اول چندتا سوال می کنم و به آنها جواب می دهم...

1- تفاوت mysqli_fetch_row با mysqli_fetch_assoc چیست؟
2- کجا از mysqli_fetch_row و کجا از mysqli_fetch_assoc استفاده کنیم؟

در جواب سوال یک باید بگویم که mysqli_fetch_row با mysqli_fetch_assoc در کاربرد هیچ تفاوتی ندارند فقط آرایه ایی که mysqli_fetch_row بر می گرداند فیلدها بصورت عددی است بدین صورت مموری کمتری گرفته می شود اما mysqli_fetch_assoc نام فیلدها را بر می گرداند که اینطور سبب بالارفتن خوانایی اسکریپت و بالتبع رم می شود.

امیدوارم منظورم را برای جواب یک متوجه شده باشی
حالا به مثال MySQL زیر که با mysqli_query اجرا شده توجه کنید:



$q = "SELECT * FROM users";
$r = mysqli_query($dbc,$q);


فرض کن فیلدهای جدول یوزر این ها باشد: id,username,name,reg_date

حالا اگر ما با کد ذیل آرایه ها را برگردانیم:


$row = mysqli_fetch_assoc($r);


به راحتی می توانیم با آوردن نام فیلد در جلوی آرایه row با قالب ذیل اطلاعات یک فیلد را فراخوانی کنیم.


$row['id']


اما اگر می خواستیم بصورت عددی با دستور:


$row = mysqli_fetch_row($r);


بایستی ما ترتیب فیلدها را با دقت در دیتابیس بدانیم که این خود نیاز است برای هر بار نوشتن به ترتیب آن در دیتابیس نگاه کرد اما می توانیم با تغییر دادن Query استفاده از این تابع را آسانتر کنیم حالا من دوباره دستور mysql را تغییر می دهم



$q = "SELECT id,name FROM users";


الان اگر از کد ذیل استفاده کنیم:


$row = mysqli_fetch_row($r);


آرایه $row[1] و $row[2] ، به ترتیب ID و name را بر می گرداند چون ما فقط دو فیلد id و name رو انتخاب کردیم.

ببخشید بخاطر توضیحات ناقصم من سعی کردم که تمام منظورم را برسانم اما در قالب نوشته کمی سخت بود.

با تشکر
پژمان

movahedian1
چهارشنبه 18 آبان 1390, 12:12 عصر
سلام
نمی دانم چرا پاسخ قبلی بنده منتشر نشد

در هر صورت مشکل اصلی اینجاست که هنگام استفاده از عدد برای دریافت اطلاعات مانند


$row[1]

میشه با یک حلقه while تمام سطرهای جدول رو گرفت، ولی هنگام استفاده از ناتم فیلد مانند


$row['id']

با یک حلقه while فقط یک سطر رو برمیگردونه و باید برای دریافت تمام سطرها از یک حلقه اضافی foreach استفاده کرد

باتشکر

pejman_view
جمعه 20 آبان 1390, 13:35 عصر
منظور اینه که به جای استفاده از شماره:
1
$row[1]




از اسم فیلد استفاده بشه:
1
$row['test']






سلام

لطفاً این کد را امتحان کن:



While ($row = mysqli_fetch_assoc($dbc,$q)){
echo $row['id'];
}


با تشکر

movahedian1
یک شنبه 29 آبان 1390, 18:26 عصر
سلام

لطفاً این کد را امتحان کن:



While ($row = mysqli_fetch_assoc($dbc,$q)){
echo $row['id'];
}


با تشکر

سلام
با تشکر
این نیز تنها یک سطر را برمی گرداند
البته ظاهرا درستش این باشد:

While ($row = mysqli_fetch_assoc($result)){
echo $row['id'];
}

satan_905
دوشنبه 30 آبان 1390, 09:43 صبح
دستورات بالا هر دفعه فقط یک سطر را برمیگرانند که باید با یک حلقه تمام سطرهای موجود در ارایه را خواند ولی میتوان از دستور mysql_result استفاده کرد که هر بار فقط یک فیلد را بر گرداند این تابع سه تا پارامتر میگیره که یکیش شماره فیلد که میتوان بجای شماره فیلد از نام فیلد هم استفاده کرد