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

در پرس و جوهای ساده، نحو یک رشته از انتخاب به آرایه تبدیل می شود؛ در پرس و جوهای جریانی، این ابزاری برای پردازش متوالی جریان اطلاعات است.

مثال نحوی و کاربردی

در ورودی PHP MySQLواکشی آرایه نتیجه پرس و جو را دریافت می کند و فرمت نتیجه مورد نظر را می توان مشخص کرد:

  • MYSQL_ASSOC؛
  • MYSQL_NUM؛
  • MYSQL_BOTH.

در حالت اول یک آرایه انجمنی تشکیل می شود، در حالت دوم یک آرایه با شاخص های عددی و در حالت دوم یک آرایه با شاخص های هر دو نوع در دسترس خواهد بود.

در نتیجه اعدام $aFetch = mysqli_fetch_array ($cResult)آرایه ای ایجاد خواهد شد $aFetch.

AT این مثالآرایه واکشی MySQL داده های اصلی را پردازش می کند (1). تنها چهار رکورد در جدول وجود دارد که هر کدام گزینه‌های واکشی متفاوتی دارند. نتیجه پردازش نمونه (2) به خطوط داده (3) دوخته می شود: $cFetch، $cFetch1، $cFetch2، $cFetch3.

نتایج نشان می‌دهد که بدون تعیین ثابت‌های MYSQL_ASSOC، MYSQL_NUM، و MYSQL_BOTH، نتیجه مشابه مورد MYSQL_BOTH است. این ثابت ها منسوخ شده و استفاده از آنها منسوخ شده است.

استفاده از آرایه واکشی MySQL

استفاده از انتخاب نتیجه پرس و جو در قالب آرایه در برنامه های PHP بسیار راحت است. دسترسی به عملکرد به پایگاه داده MySQLایمن را فراهم می کند و روش های قابل اعتماددسترسی داشته باشید.

آرایه واکشی MySQL تنها در صورتی خطای سطح هشدار ایجاد می کند که $cResult موجود نباشد یا نامعتبر باشد، و بنابراین اتصال به پایگاه داده انجام نشد. نام cResult $ می تواند هر چیزی باشد، در اینجا در متن مثال استفاده می شود. در درخواست (2):

  • $cResult = mysqli_query($this->iConnectId، $cQuery);

متغیر $this->iConnectId اتصال پایگاه داده فعال است که به عنوان یک شی چند منظوره فرمت شده است.

ابزار آرایه واکشی MySQL ساده و قدرتمند است، اما همچنان استفاده از آن به روشی شی گرا راحت است.

شی دسترسی به پایگاه داده

MySQL یک ابزار بسیار ساده و کارآمد برای سازماندهی اطلاعات است. پایه ها داده های MySQLدر تمام مدت کاربردشان، آنها ثابت کرده اند که وسیله ای قابل اعتماد و کارآمد برای ذخیره و دسترسی به داده ها هستند.

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

ساختار واکشی MySQL در عمل واقعی نسبتاً دست و پا گیر است، به خصوص زمانی که لازم است اطلاعات را از یک جدول اطلاعات اولیه واکشی کنیم، به عنوان مثال، کارکنان، و سپس داده های کارکنان را از جداول دیگر انتخاب کنیم:

  • تاریخچه کار؛
  • اطلاعات بیوگرافی؛
  • دستاوردهای تولید؛
  • حوزه صلاحیت حرفه ای؛
  • داده های دیگر

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

سطح به پایگاه داده

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

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

این بسیار راحت است، و نیاز به نوشتن ساخت و سازهای دست و پا گیر، ایجاد یک سابقه برای خطای احتمالی، بیرون انداختن. مهمتر از همه، این رویکرد تغییرات احتمالی در ساختار پایگاه داده را ساده می کند، زیرا آنها فراتر از شی دسترسی به پایگاه داده نمی روند. در صورت لزوم، فقط باید شیء دسترسی به پایگاه داده را دوباره انجام دهید، و نه کل عملکرد سایت.

ساختن اشیاء با هدف واقعی بر روی شی دسترسی به پایگاه داده حتی راحت تر است. به عنوان مثال، یک توصیف کارکنان که دارای ویژگی‌هایی است: فهرست، نمایش داده‌های یک کارمند، تغییر کارت کارمند، و غیره. ابزارهای دسترسی به داده‌ها در بطن روش‌های اشیاء واقعی پنهان شده‌اند که کار توسعه‌دهنده را ساده می‌کند و بهبود می‌بخشد. کیفیت نتیجه

یک فیلد نتیجه خاص را دریافت کنید.

نحو:

int mysql_result (نتیجه int، ردیف int [، فیلد مختلط])

تابع مقدار فیلد را برمی گرداند رشتهدر خط نتیجه با عدد ردیف. پارامتر رشتهمی تواند نه تنها نام فیلد، بلکه شماره آن را نیز مشخص کند - موقعیتی که ستون "ایستاده" در هنگام ایجاد جدول، و همچنین نام کامل فیلد فرم: "table_name.field_name". با این حال، توصیه می شود تا حد امکان از نام فیلدها استفاده کنید.

عملکرد جهانی است: با کمک آن می توانید کل نتیجه را در یک سلول "دور بزنید". و اگرچه این کار ممنوع نیست، اما انجام آن توصیه نمی شود، زیرا. mysql_result()کاملا کند کار می کند

mysql_fetch_array

رکورد بعدی را از نتیجه استخراج می کند و آن را در یک آرایه انجمنی قرار می دهد.

نحو:

آرایه mysql_fetch_array (نتیجه int [، int result_type])

عملکرد mysql_fetch_array()ردیف بعدی نتیجه را به عنوان یک آرایه انجمنی برمی‌گرداند، جایی که هر فیلد با یک عنصر با یک کلید مرتبط با نام فیلد مرتبط است. علاوه بر این، عناصر با کلیدهای عددی و مقادیر مربوط به مقادیر فیلدهای دارای این شاخص ها در آرایه نوشته می شوند. در آرایه برگشتی، بلافاصله بعد از عناصر با کلیدهای "عادی" قرار می گیرند.

پارامتر نتیجه_نوعنوع آرایه برگشتی را مشخص می کند و می تواند یکی از مقادیر زیر را بگیرد: MYSQL_NUM, MYSQL_ASSOC, MYSQL_BOTH(پیش فرض).

ممکن است این سوال پیش بیاید: اصلاً چرا به شاخص های عددی نیاز داریم. پاسخ ساده است: نکته این است که در نتیجه انتخاب، در واقع، ممکن است فیلدهایی (در واقع، ستون ها) با نام های مشابه، اما، بر این اساس، با شاخص های مختلف وجود داشته باشد. این زمانی اتفاق می افتد که نمونه انتخاب کنیدبه طور همزمان از چندین جدول تولید می شود.

mysql_connect ($host، $user، $pass)؛ $result=mysql_db_query("پایگاه داده"، "انتخاب شناسه، نام از جدول"); while($row=mysql_fetch_array($result)) ( echo "id: ".$row["id"]."
"; echo "id: ".$row."
"; echo "name: ".$row["name"]."
"; echo "name: ".$row."
"; )؛ mysql_free_result($result);

mysql_fetch_row

یک ورودی به آرایه شماره گذاری شده می نویسد.

نحو:

آرایه mysql_fetch_row (نتیجه int)

تابع یک فهرست آرایه با مقادیر فیلدهای خط بعدی نتیجه را برمی گرداند نتیجه. اگر نشانگر موقعیت فعلی نتیجه فراتر از آن تنظیم شود آخرین ورودی(یعنی خطوط تمام شده است)، false برگردانده می شود. موقعیت فعلی به رکورد بعدی منتقل می شود، بنابراین تماس بعدی mysql_fetch_row()ردیف بعدی نتیجه را برمی گرداند.

هر فیلد رکورد در یک عنصر آرایه شماره گذاری شده ذخیره می شود. شماره گذاری از 0 شروع می شود.

$r=mysql_query("* را از OutTable که در آن سن انتخاب کنید

همانطور که می بینید، به محض تمام شدن خطوط، حلقه شکسته می شود، یعنی. چه زمانی mysql_fetch_row()نادرست باز خواهد گشت

mysql_fetch_object

یک ورودی در خصوصیات یک شیء دریافت کنید.

نحو:

شیء mysql_fetch_object (نتیجه int)

تابع یک شی را برمی‌گرداند که ویژگی‌های آن شامل فیلدهای رکورد جاری است. اگر ورودی دیگری وجود نداشته باشد، false را برمی‌گرداند.

mysql_connect ($host، $user، $pass)؛ $result=mysql_db_query("پایگاه داده"، "انتخاب * از جدول"); while($rows=mysql_fetch_object($result)) ( echo $rows->id; echo $rows->name; );

mysql_fetch_lengths

طول عنصر ورودی را برمی‌گرداند.

نحو:

آرایه mysql_fetch_lengths (نتیجه int)

عملکرد mysql_fetch_lengths()طول مقدار بدست آمده را با استفاده از توابع برمی گرداند mysql_fetch_row(), mysql_fetch_array()یا mysql_fetch_object().

برای مثال در مثال زیر:

$arr=mysql_fetch_row($result); $len=mysql_fetch_lengths($result);

آرایه $لنطول عناصر آرایه مربوطه را شامل می شود $arr، یعنی $len=strlen(arr)و غیره.

mysql_fetch_field

اطلاعاتی در مورد خصوصیات شی و فیلد رکورد را برمی گرداند.

نحو:

شیء mysql_fetch_field (نتیجه int [, int field_offset])

در یک پارامتر اختیاری field_offsetتعداد فیلدی که می خواهیم ویژگی های آن را بدست آوریم تنظیم شده است. اگر این پارامتر مشخص نشده باشد، هر بار تابع فراخوانی می شود mysql_fetch_field() خواص فیلد بعدی در مجموعه رکوردها برگردانده می شود نتیجه.

شیء برگشتی دارای ویژگی های زیر است:

  • نام- نام زمینه
  • جدول- نام جدولی که فیلد به آن تعلق دارد
  • بیشترین طول- حداکثر طول میدان
  • تهی نیست- 1 اگر فیلد مجاز باشد خالی باشد
  • کلید_اصلی- 1 اگر فیلد یک فیلد کلیدی باشد
  • منحصر به فرد- 1 اگر فقط مقادیر منحصر به فرد در فیلد مجاز باشد
  • کلید_چندین- 1 اگر فیلد مجاز به داشتن مقادیر تکراری باشد
  • عددی- 1 اگر فیلد عددی باشد
  • لکه- 1 اگر فیلد از نوع BLOB باشد
  • نوع- نوع میدان
  • بدون امضا- 1 اگر فیلد عددی بدون علامت باشد
  • صفر پر کردن- 1 اگر فیلد با صفر پر شده باشد
mysql_connect ($host,$user,$pass); $result=mysql_db_query("پایگاه داده"، * از جدول را انتخاب کنید"); for($i=0;$i "; $param=mysql_fetch_field($result)؛ if(!$param) echo "اطلاعات ویژگی وجود ندارد!" ; echo " name: $param->نام جدول: $param->table max_length: $param->max_length not_null: $param->not_null basic_key: $param->primary_key unique_key: $param->unique_key multiple_key: $param- > عددی کلید چندگانه: $param->عددی حباب: $param->نوع blob: $param->نوع بدون علامت: $param->unsigned zerofill: $param->zerofill ";)

mysql_field_seek

مکان نما را به قسمت مشخص شده منتقل می کند.

نحو:

int mysql_field_seek (نتیجه int، int field_offset)

این ویژگی اضافی است. قطعه های زیر معادل خواهند بود:

$param=mysql_fetch_field($result, field_offset);

mysql_field_seek($result, field_offset); $param=mysql_fetch_field($result);

mysql_field_name

نام فیلد را برمی گرداند.

نحو:

رشته mysql_field_name (نتیجه int، int filed_index)

عملکرد mysql_field_name()نام فیلدی را که در نتیجه قرار دارد برمی گرداند نتیجهبا شاخص filed_index(شماره گذاری از 0 شروع می شود).

$result=mysql_query("انتخاب شناسه، نام از جدول"); echo mysql_field_name($result,1); // خروجی: نام

mysql_field_table

نام جدولی که فیلد از آن بازیابی شده است را برمی گرداند.

نحو:

رشته mysql_field_table (نتیجه int، int field_offset)

نام جدولی را که فیلد با افست از آن بازیابی شده است، برمی گرداند field_offsetدر نتیجه نتیجه.

mysql_field_len

طول میدان را برمی‌گرداند.

نحو:

int mysql_field_len (نتیجه int، int filed_offset)

تابع طول فیلد را در نتیجه برمی گرداند نتیجه. فیلد طبق معمول با تعیین افست آن تنظیم می شود. طول در اینجا به معنای اندازه داده های فیلد بر حسب بایت نیست، بلکه به معنای اندازه ای است که هنگام ایجاد آن مشخص شده است. به عنوان مثال، اگر فیلد از نوع varchar باشد و (به همراه جدول) با نوع ایجاد شده باشد varchar (100)، سپس 100 برای آن برگردانده می شود.

mysql_field_type

نوع مجموعه رکورد نتیجه را برمی‌گرداند.

نحو:

رشته mysql_field_type (نتیجه int، int filed_offset)

این ویژگی مشابه است mysql_filed_name()، فقط نه نام، بلکه نوع ستون مربوطه را در نتیجه برمی گرداند. آنها ممکن است، برای مثال، بین المللی, دو برابر, واقعیو غیره.

mysql_connect ($host,$user,$pass); mysql_select_db("mydb"); $result=mysql_query("SELECT * FROM tabl"); $fields=mysql_num_fields($result); $rows=mysql_num_rows($result); $i=0; $table=mysql_field_table($result,$i); echo "جدول "$table" دارای $ فیلدها و $ ردیف از رکوردها است
"؛ echo "ساختار جدول:
"; while($i"; $i++; )

mysql_field_flags

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

نحو:

رشته mysql_field_flags (نتیجه int، int field_offset)

رشته برگشتی مجموعه ای از کلمات است که با فاصله از هم جدا شده اند، بنابراین می توانید با استفاده از تابع آن را به یک آرایه تبدیل کنید. انفجار ():

$Flags=explode(" ",mysql_field_flags($r,$field_offset));

فیلدهای ضبط در MySQLممکن است دارای ویژگی های پرچم زیر باشد:

  • "تهی نیست"
  • "کلید_اصلی"
  • "کلید منحصر به فرد"
  • "چند_کلید"
  • لکه
  • "بدون امضا"
  • "صفر پر کردن"
  • "دودویی"
  • enum
  • "افزایش خودکار"
  • "مهر زمان"

mysql_list_fields

لیستی از فیلدهای جدول را برمی گرداند.

نحو:

int mysql_list_fields (string dbname، string tblname [,int link_identifier])

عملکرد mysql_list_fields()اطلاعات مربوط به جدول مشخص شده را برمی گرداند tblnameدر پایگاه داده bdname، با استفاده از شناسه اتصال link_identifierاگر تنظیم شده باشد (در غیر این صورت، آخرین اتصال باز). مقدار بازگشتی یک شناسه نتیجه است که می تواند با روش های معمولی تجزیه شود. اگر خطایی رخ دهد، -1 برگردانده می شود، متن پیام خطا را می توان به روش معمول بازیابی کرد.

$link=mysql_connect($host,$user,$pass); $fields=mysql_list_fields("db1"، "table"، $link); $colums=mysql_num_fields($fields); // تعداد فیلدهای جدول // سپس نام تمام فیلدهای جدول را برای ($i=0;$i"; ) چاپ کنید.

mysql_num_fields

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

نحو:

int mysql_num_fields (نتیجه int)

با توجه به آنچه گفته شد، تابع به شما امکان می دهد بعد افقی "آرایه دو بعدی نتیجه" را تعیین کنید.

mysql_errno

شماره آخرین خطا را برمی گرداند.

نحو:

int mysql_errno()

این تابع تعداد آخرین خطای گزارش شده یا 0 را در صورت عدم وجود خطا برمی گرداند.

مشخص کننده link_identifierاگر فقط یک اتصال در طول اجرای اسکریپت برقرار شده باشد، می تواند حذف شود.

mysql_connect("dbname"); echo mysql_errno().": ".mysql_error()."
";

mysql_error

یک پیغام خطا برمی گرداند.

نحو:

رشته mysql_error()

این تابع یک رشته حاوی متن پیام خطا یا یک رشته خالی را در صورت عدم وجود خطا برمی گرداند.

mysql_connect("dbname"); echo mysql_errno().": ".mysql_error()."
";

$query = "انتخاب col1,col2,col3 از جدول WHERE id > 100" $result = _query($query);

برای این عمل:

در حالی که ($row = mysql_fetch_array($result))( .... )

آیا 1 حلقه (تکرار x بار) ایجاد می کند؟

و برای این:

$row = mysql_fetch_array($result) foreach($row به عنوان $r)(...)

آیا 2 حلقه (تکرار x بار) انجام می دهد؟

که در آن x تعداد نتایج است

ویرایش:

باشه ممنون بچه ها باشه من اساسا این سوال رو خیلی بد بیان کردم.

در گذشته باید چنین می شد

"mysql_fetch_array() فقط یک سطر را با هر بار فراخوانی برمی گرداند"

اکنون خوشحالم که درک من از ()mysql_fetch_array v بود. بی وفا!

ممنون بخاطر وقتی که گذاشتید!

من فرض می‌کنم که mysql_fetch_array() perfroms loop است، بنابراین اگر حلقه تودرتو را حفظ می‌کند، علاقه‌مندم که از while() در ترکیب با آن استفاده کنم.

خیر mysql_fetch_array به سادگی سطر نتیجه بعدی را برمی گرداند و نشانگر داخلی را پیش می برد. او قطع نمی شود. (در داخل، ممکن است از نوعی حلقه در جایی استفاده کند یا نباشد، اما این مهم نیست.)

در حالی که ($row = mysql_fetch_array($result)) (...)

این کار زیر را انجام می دهد:

  1. ردیف به ردیف $ اختصاص داده شده است
  2. عبارت مورد ارزیابی قرار می گیرد و اگر درست باشد، محتویات حلقه اجرا می شود
  3. روش دوباره شروع می شود
$row = mysql_fetch_array($result); foreach ($ ردیف به عنوان $r) (...)

این کار زیر را انجام می دهد:

  1. mysql_fetch_array واکشی می کند و ردیف بعدی را برمی گرداند
  2. ردیف به ردیف $ اختصاص داده شده است
  3. foreach روی محتویات آرایه حلقه زده و محتویات حلقه را به تعداد عناصر موجود در آرایه اجرا می کند.

در هر دو مورد، mysql_fetch_array همین کار را انجام می دهد. شما چرخه های زیادی می نویسید. با این حال، هر دو ساختار یک کار را انجام نمی دهند. دومی فقط روی یک ردیف از نتیجه عمل می کند، در حالی که ردیف اول روی همه ردیف ها تکرار می شود.

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

برای اول: برنامه شما یک بار برای هر ردیف در مجموعه نتایجی که توسط پرس و جو برگردانده شده است حلقه می شود. با استفاده از mysql_num_rows() می‌توانید از قبل بدانید که چند نتیجه وجود دارد.

برای دوم: این بار فقط استفاده می کنید یک خطنتیجه تنظیم می شود و شما برای هر کدام کاری انجام می دهید ستون ها. این همان کاری است که ساختار foreach انجام می دهد: برای هر ورودی در آرایه ردیف $ از بدنه حلقه عبور می کند. تعداد دفعاتی که برنامه در حلقه حلقه می زند، از قبل مشخص است: برای هر ستون در مجموعه نتیجه یک بار حلقه می شود (که احتمالاً می دانید، اما اگر نیاز به تعیین آن دارید، می توانید از count ($row) استفاده کنید) .

$query = "انتخاب col1,col2,col3 از جدول WHERE id > 100" $result = mysql_query($query); if(mysql_num_rows($result)>0) ( while($row = mysql_fetch_array()) //اینجا تو می توانیاز توابع زیادی مانند mysql_fetch_assoc() و سایر (//1 ردیف را به متغیر شما برمی گرداند که به آرایه تبدیل می شود و به طور خودکار به رشته نتیجه بعدی Echo $row["col1"]."|".Echo $row["col2" "]."|".Echo $row["col2"]; ) )

بله، mysql_fetch_array() فقط یک نتیجه را برمی گرداند. اگر می خواهید بیش از یک خط دریافت کنید، باید فراخوانی تابع را در یک حلقه while قرار دهید.

دو مثال:

این فقط ردیف اول را برمی گرداند

$row = mysql_fetch_array($result);

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

while($row = mysql_fetch_array($result)) (//انجام کارها با محتویات ردیف $)

خط اول:

$result = mysql_query ($query);

منبع php db را برگردانید.

سطر دوم

در حالی که ($row = mysql_fetch_array($result))

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

به جای آن از mysql_fetch_assoc استفاده کنید
در این مورد، رشته دارای جفت های کلید => مقدار است.
در حالی که فقط این را قرار دهید:
print_r($row) و متوجه خواهید شد
اگر از mysql_fetch_assoc استفاده می کنید، فرمت رشته به صورت زیر خواهد بود:

$row["column1_name"] = column1_value; $row["column2_name"] = column2_value;

برای این:

$row = mysql_fetch_assoc($result) foreach ($row به عنوان $columnName => $columnValue) (... )

شما اولین سطر را از پرس و جو دریافت می کنید و در اولین نتیجه پرس و جو از طریق تمام ستون ها حلقه می زنید.