استفاده از MS Access در PHP. استفاده از MS Access در PHP دسترسی معتبر php

استفاده از MS Access در PHP. استفاده از MS Access در PHP دسترسی معتبر php

محبوبیت Microsoft Access DBMS (http://www.microsoft.com/office/access) تا حدی با رابط گرافیکی مناسب آن توضیح داده شده است. علاوه بر استفاده از Access به‌عنوان یک DBMS مستقل، می‌توانید از رابط گرافیکی آن برای سازماندهی کار با سایر پایگاه‌های داده استفاده کنید - به عنوان مثال، MySQL یا Microsoft SQL Server.

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

  1. یک پایگاه داده Access ایجاد کنید. فرض بر این است که شما از قبل می دانید که چگونه این کار را انجام دهید، و اگر نمی دانید چگونه این کار را انجام دهید، اما همچنان می خواهید اجرای این مثال را دنبال کنید، از خدمات برنامه جادوگر استفاده کنید. من یک پایگاه داده استاندارد برای ذخیره اطلاعات تماس با استفاده از یک جادوگر ایجاد کردم. حتما چندین رکورد در جدول ایجاد کنید و نام جدول را به خاطر بسپارید، به زودی به آن نیاز خواهیم داشت!
  2. پایگاه داده را در رایانه خود ذخیره کنید.
  3. در مرحله بعد دسترسی به پایگاه داده Access را با استفاده از ODBC سازماندهی می کنیم. Start > Settings > Control Panel را انتخاب کنید. نماد ODBC Data Sources (32 بیت) را در کنترل پنل پیدا کنید. این نماد ODBC Administrator را راه اندازی می کند که برای پیکربندی درایورها و منابع داده مختلف در سیستم شما طراحی شده است. با دوبار کلیک کردن روی این نماد برنامه را اجرا کنید. پنجره Administrator به طور پیش فرض در تب User DSN باز می شود. این برگه منابع داده‌ای را فهرست می‌کند که مختص یک کاربر خاص هستند و فقط در آن رایانه قابل استفاده هستند. در این مثال، این منبع داده ای است که استفاده خواهد شد.
  4. روی دکمه Add... در سمت راست پنجره کلیک کنید. پنجره جدیدی برای انتخاب درایوری که برای کار با منبع جدید طراحی شده باز می شود. خط Microsoft Access Driver(*.mdb) را انتخاب کرده و روی Finish کلیک کنید.
  5. پنجره جدیدی روی صفحه ظاهر می شود: نصب درایور ODBC برای Microsoft Access (ODBC Microsoft Access Setup). کادر متنی Data Source Name را در فرم پیدا کنید و نام پایگاه داده Access که ایجاد کرده اید را در آن وارد کنید. در صورت تمایل می توانید توضیحاتی را در کادر متنی که دقیقاً در زیر قسمت نام منبع داده قرار دارد وارد کنید.
  6. روی دکمه Select... کلیک کنید - پنجره ای به سبک Windows Explorer ظاهر می شود. از شما می خواهد پایگاه داده ای را پیدا کنید که با استفاده از ODBC به آن دسترسی پیدا کنید.
  7. پایگاه داده خود را در درخت دایرکتوری پیدا کنید و روی آن دوبار کلیک کنید. شما به پنجره Install ODBC Driver for Microsoft Access برگردانده می شوید. مسیر دسترسی به پایگاه داده انتخاب شده در بالای دکمه Select... نمایش داده می شود.
  8. آماده! اکنون می توانید با استفاده از ODBC با پایگاه داده Access کار کنید.

تنها کاری که باید انجام دهید این است که یک اسکریپت ایجاد کنید که در آن از طریق ODBC با پایگاه داده کار کنید. در سناریوی زیر، توابع متداول ODBC (به بالا مراجعه کنید) برای نمایش تمام اطلاعات از جدول مخاطبین ایجاد شده با استفاده از جادوگر Access استفاده خواهند شد. با این حال، قبل از در نظر گرفتن سناریو، مفید است که بدانید جدول Contacts در Access چگونه به نظر می رسد (شکل 11.3).

برنج. 11.3. جدول مخاطبین در MS Access

اکنون می دانید چه اطلاعاتی از پایگاه داده بازیابی می شود، می توانیم به سراغ اسکریپت برویم. اگر فراموش کرده اید که یک تابع چه کاری انجام می دهد، به توضیحات ابتدای این فصل مراجعه کنید. نتایج فهرست 11.7 در شکل نشان داده شده است. 11.4.

لیست 11.7. استفاده از توابع ODBC برای کار با MS Access

همه چیز ساده نیست؟ و بهترین چیز این است که این اسکریپت با هر DBMS دیگری که از ODBC پشتیبانی می کند کاملاً سازگار است. برای تمرین، سعی کنید تمام مراحل توضیح داده شده را برای یک DBMS دیگر تکرار کنید، اسکریپت را اجرا کنید - و همان نتایج نشان داده شده در شکل را دریافت خواهید کرد. 11.4.

اگر قصد دارید وب سایت پویا خود را بر روی پلتفرم ویندوز ایجاد کنید، به احتمال زیاد وظیفه انتخاب یک DBMS برای ذخیره اطلاعات را خواهید داشت (ظاهراً در مورد زبانی که آن را به آن برنامه ریزی می کنید سؤالی وجود ندارد). یکی از گزینه های حل این مشکل ممکن است استفاده از MS Access به عنوان سرور SQL باشد. در ادامه نحوه دسترسی به پایگاه داده MS Access در یک اسکریپت نوشته شده در PHP را شرح خواهیم داد.

متأسفانه، PHP ابزارهای داخلی برای کار با این DBMS ندارد، که با این حال، آنها را از کار با هم محروم نمی کند - ما از ODBC برای اتصال به پایگاه داده استفاده خواهیم کرد.

اول از همه، ما باید به اصطلاح DSN Source را ایجاد کنیم. برای انجام این کار (گزینه زمانی که کاربر ویندوز 2000 Rus را نصب کرده باشد در نظر می گیریم)، ​​در کنترل پنل باید Administration و سپس Data Sources (ODBC) را انتخاب کنیم. سپس در پنجره ای که ظاهر می شود، تب system DSN را انتخاب کنید، روی دکمه add کلیک کنید، درایور MS Access را انتخاب کنید و روی دکمه done کلیک کنید. در قسمت ورودی نام منبع داده، نامی را بنویسید که بعداً بتوانیم به دیتابیس خود دسترسی پیدا کنیم، مثلاً تست کنیم، سپس روی دکمه انتخاب کلیک کنید و مشخص کنید که فایل پایگاه داده ما در کجای دیسک ما قرار دارد. سپس در صورت نیاز می توانیم با کلیک بر روی دکمه اضافی یک نام کاربری و رمز عبور برای دسترسی به پایگاه داده از طریق ODBC تعیین کنیم. اکنون که یک منبع داده ODBC داریم، می توانیم از تابع odbc_connect برای اتصال به پایگاه داده خود استفاده کنیم:

$x=odbc_connect("تست"،"تست"،"تست");
?>

برای ارسال درخواست به DBMS، می توانیم از تابع odbc_exec استفاده کنیم:

$res=odbc_exec($x,"ایجاد تست جدول (f1 integer, f2 varchar(10))");
$res=odbc_exec($x,"insert into test (f1,f2) values(1,"qwerty")");
$res=odbc_exec($x,"insert into test (f1,f2) values(2,"asdfgh")");
?>

اگر پس از اجرای این مثال، پایگاه داده تست را در MS Access باز کنیم، متوجه می‌شویم که یک تست جدول جدید با فیلدهای f1 و f2 از انواع عدد صحیح و رشته‌ای در آنجا ظاهر شده است. جدول دارای دو رکورد با داده هایی است که در درخواست مشخص شده است.

متأسفانه، همه توابع کار با ODBC به درستی با MS Access کار نمی کنند، به عنوان مثال، توابع odbc_num_rows و odbc_fetch_array. بنابراین، در نسخه PHP که روی رایانه من نصب شده است، PHP به طور کلی پیامی را نشان می دهد که تابع odbc_fetch_array برای آن شناخته شده نیست. اما این مشکلات را می توان با توصیف دو عملکرد زیر و استفاده از آنها به جای موارد ذکر شده قبلی حل کرد:

تابع xodbc_num_rows ($sql_id، $CurrRow = 0)
{
$NumRecords = 0;
odbc_fetch_row ($sql_id، 0);
while (odbc_fetch_row($sql_id))
{
$NumRecords++;
}
odbc_fetch_row ($sql_id، $CurrRow);
بازگشت $NumRecords.
}
تابع xodbc_fetch_array($result، $rownumber=-1) (
اگر ($rownumber< 0) {
odbc_fetch_into($result، &$rs);
) دیگر (
odbc_fetch_into($result، &$rs، $rownumber);
}
foreach ($rs به ​​عنوان $key => $value) (
$rs_assoc = $value;
}
بازگشت $rs_assoc;
}

$res=odbc_exec($x,"انتخاب * از تست");
$cnt=xodbc_num_rows($res);
?>


برای ($i=0;$i<$cnt;$i++) {
$row=xodbc_fetch_array($res,$i+1);
پژواک" ";
}
?>
f1f2
".$row["f1"]."".$row["f2"]."

محبوبیت Microsoft Access DBMS (http://www.microsoft.com/office/access) تا حدی با رابط گرافیکی مناسب آن توضیح داده شده است. علاوه بر استفاده از Access به‌عنوان یک DBMS مستقل، می‌توانید از رابط گرافیکی آن برای سازماندهی کار با سایر پایگاه‌های داده استفاده کنید - به عنوان مثال، MySQL یا Microsoft SQL Server.

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

  • یک پایگاه داده Access ایجاد کنید. فرض بر این است که شما از قبل می دانید که چگونه این کار را انجام دهید، و اگر نمی دانید چگونه این کار را انجام دهید، اما همچنان می خواهید اجرای این مثال را دنبال کنید، از خدمات برنامه جادوگر استفاده کنید. من یک پایگاه داده استاندارد برای ذخیره اطلاعات تماس با استفاده از یک جادوگر ایجاد کردم. حتما چندین رکورد در جدول ایجاد کنید و نام جدول را به خاطر بسپارید، به زودی به آن نیاز خواهیم داشت!
  • پایگاه داده را در رایانه خود ذخیره کنید.
  • در مرحله بعد دسترسی به پایگاه داده Access را با استفاده از ODBC سازماندهی می کنیم. شروع > تنظیمات > کنترل پنل (شروع > تنظیمات > صفحه کنترل). نماد ODBC Data Sources (32 بیت) را در کنترل پنل پیدا کنید. این نماد ODBC Administrator را راه اندازی می کند که برای پیکربندی درایورها و منابع داده مختلف در سیستم شما طراحی شده است. با دوبار کلیک کردن روی این نماد برنامه را اجرا کنید. پنجره Administrator به طور پیش فرض در تب User DSN باز می شود. این برگه منابع داده‌ای را فهرست می‌کند که مختص یک کاربر خاص هستند و فقط در آن رایانه قابل استفاده هستند. در این مثال، این منبع داده ای است که استفاده خواهد شد.
  • روی دکمه Add... در سمت راست پنجره کلیک کنید. پنجره جدیدی برای انتخاب درایوری که برای کار با منبع جدید طراحی شده باز می شود. خط Microsoft Access Driver (*.mdb) را انتخاب کرده و روی Finish کلیک کنید.
  • پنجره جدیدی روی صفحه ظاهر می شود: نصب درایور ODBC برای Microsoft Access (ODBC Microsoft Access Setup). کادر متن Data Source Name را در فرم پیدا کنید و نام پایگاه داده Access را که ایجاد کرده اید وارد کنید. در صورت تمایل می توانید توضیحاتی را در کادر متنی که دقیقاً در زیر قسمت نام منبع داده قرار دارد وارد کنید.
  • روی دکمه Select... کلیک کنید - یک پنجره به سبک Windows Explorer ظاهر می شود. از شما می خواهد پایگاه داده ای را پیدا کنید که با استفاده از ODBC به آن دسترسی پیدا کنید.
  • پایگاه داده خود را در درخت دایرکتوری پیدا کنید و روی آن دوبار کلیک کنید. شما به پنجره Install ODBC Driver for Microsoft Access برگردانده می شوید. مسیر دسترسی به پایگاه داده انتخاب شده در بالای دکمه Select... نمایش داده می شود.
  • آماده! اکنون می توانید با استفاده از ODBC با پایگاه داده Access کار کنید.

تنها کاری که باید انجام دهید این است که یک اسکریپت ایجاد کنید که در آن از طریق ODBC با پایگاه داده کار کنید. در سناریوی زیر، توابع متداول ODBC (در بالا) برای نمایش تمام اطلاعات از جدول مخاطبین ایجاد شده با استفاده از جادوگر Access استفاده خواهند شد. با این حال، قبل از در نظر گرفتن سناریو، مفید است که بدانید جدول Contacts در Access چگونه به نظر می رسد (شکل 11.3).



برنج. 11.3.جدول مخاطبین در MS Access

اکنون می دانید چه اطلاعاتی از پایگاه داده بازیابی می شود، می توانیم به سراغ اسکریپت برویم. اگر فراموش کرده اید که یک تابع چه کاری انجام می دهد، به توضیحات ابتدای این فصل مراجعه کنید. نتایج فهرست 11.7 در شکل نشان داده شده است. 11.4.

لیست 11.7.استفاده از توابع ODBC برای کار با MS Access

// اتصال به منبع داده ODBC "ContactDB" ;connect = odbc_connect("ContactDB", """")

یا مرگ ("نمی توان به منبع داده متصل شد.");

// متن درخواست را ایجاد کنید

$query = "SELECT_Name، Last_Name، Cell_Phone، Email FROM Contacts";

// درخواست را آماده کنید

$result = odbc_prepare($connect,$query);

// کوئری را اجرا کنید و نتایج را نمایش دهید

odbc_execute($result);

odbc_result_all($result, "BGCOLOR="#c0c0c0" border=1");

// پردازش نتایج کامل شد، حافظه آزاد odbc_free_result($result);

// بستن اتصال odbc_close($connect);

همه چیز ساده نیست؟ بهترین چیز این است که این اسکریپت با هر DBMS دیگری که از ODBC پشتیبانی می کند کاملاً سازگار است. برای تمرین، سعی کنید تمام مراحل توضیح داده شده را برای یک DBMS دیگر تکرار کنید، اسکریپت را اجرا کنید - و همان نتایج نشان داده شده در شکل را دریافت خواهید کرد. 11.4.

برنج. 11.4.محتویات جدول مخاطبین در یک مرورگر وب

من همچنین با یک پایگاه داده Microsoft Access از راه دور مشکل دارم. فقط پایگاه داده من کمی حذف شده است. فقط در شبکه محلی، در رایانه دیگری قرار دارد.

تابع odbc_connect PHP خطای زیر را به من می دهد:
هشدار: odbc_connect(): خطای SQL: [ODBC Microsoft Access Driver] برنامه نمی تواند راه اندازی شود. پایگاه داده سیستم وجود ندارد یا با دسترسی انحصاری توسط کاربر دیگری باز است.

این زمانی اتفاق می افتد که در ویندوز من، در رایانه محلی من، در درایور ODBC، در ویژگی های "Data Source"، زبانه "System DSN"، من نشان می دهم که "System Database" (فایل گروه کاری - system.mdw) روی درایو شبکه قرار دارد. به محض اینکه همان فایل را به دیسک محلی کامپیوترم (جایی که خودم می نشینم) منتقل می کنم، همه چیز به خوبی شروع به کار می کند. من نمی توانم بفهمم چه مشکلی دارد. لطفا بهم بگو! به دلایلی، درایور ODBC سرسختانه نمی خواهد فایل گروه های کاری را در درایو شبکه مشترک ببیند. و اگر فایل به صورت محلی باشد، همه چیز با صدای بلند کار می کند. چه اشکالی می تواند داشته باشد؟ اتفاقاً در مورد خود پایه هم همین اتفاق می افتد. به طور کلی، برای اینکه odbc_connect به طور معمول کار کند، معلوم می شود که هم "فایل گروه کاری" و هم خود پایگاه داده باید در رایانه محلی قرار داشته باشند. اما من نمی توانم این کار را انجام دهم. پایه باید در جایی که هست باقی بماند. و من باید از راه دور از طریق ODBC با او تماس بگیرم و اطلاعات کمی از پایگاه داده در اینترنت در صفحه سایت ارسال کنم. نمیتونم بفهمم چرا کار نمیکنه در تنظیمات ODBC، به طور معمول می توانید تمام مسیرهای فایل های پایگاه داده راه دور را مشخص کنید. اما بعد از آن کار نمی کند. در رایانه محلی همه چیز به خوبی کار می کند.

در رایانه محلی شما:
سیستم عامل WinXP-SP2
مایکروسافت اکسس 97
PHP نسخه 5.2.3
ODBC نسخه 3.5
Appserver نسخه 2.5.5

در یک کامپیوتر راه دور، یک سرور "دو هزارم" وجود دارد.
فکر کردم شاید مشکلی در دسترسی و سیاست امنیتی وجود داشته باشد. اما من دیتابیس ها را به یک کامپیوتر معمولی تحت سیستم عامل Win 98 و به هارد دیسک تحت FAT32 منتقل کردم. اونجا هم شخم نمیزنه من از قبل خسته شده ام، نمی فهمم چه مشکلی دارد. این تصور به وجود می آید که ODBS به هیچ وجه نمی تواند با پایگاه داده های راه دور کار کند. اما این طوری نیست. به هر حال باید کار کند. کمک لطفا!

-~{}~ 17.01.08 10:30:

همین، مشکل حل شد! هورای رفقا!

با این حال، من یک متن در مورد سوال خود پیدا کردم:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=251&page=560
پست پایینی هست برای کسانی که خیلی تنبل هستند و نمی توانند در آنجا جستجو کنند، حق چاپ کلمه به کلمه آن پست در اینجا آمده است:
همانطور که متوجه شدم، ما تحت ویندوز کار می کنیم. Ctrl+Alt+Del را فشار دهید، Task Manager را انتخاب کنید و به فرآیند Apache نگاه کنید. و می بینیم که از طرف SYSTEM اجرا می شود، نه به عنوان شما. بنابراین ما می توانیم به منابع شبکه دسترسی ندارید، بنابراین ما می‌توانیم با راه‌اندازی فرآیند تحت نام مورد نیاز این مشکل را برطرف کنیم.

من آپاچی را به عنوان یک کاربر راه اندازی کردم و همه چیز با صدای بلند شروع به کار کرد.

درست است، فقط یک کمین باقی مانده بود. اتصال ODBC به پایگاه داده باید به صورت دستی در کد برنامه به این صورت نوشته شود:
Odbc_Connect("DRIVER=(Microsoft Access Driver (*.mdb)); DBQ=//server/work/baza/mybaza.mdb; systemdb=//server/work/baza/system.mda، "نام کاربری"، " رمز عبور") یا Die ("من نمی توانم به پایگاه داده متصل شوم");

اگر همین کار را از طریق "ODBC Administrator" ویندوز انجام دهید، باز هم کار نخواهد کرد. مدیر مسیرهای خود را از طریق نام درایوها ایجاد می کند. یعنی به این ترتیب:
"Z:\work\baza"
اما من نیاز دارم که مسیر یک مسیر شبکه باشد، بدون حرف درایو و با اسلش برگشتی:
"//server/work/baza/"

در اینجا مثال دیگری برای توضیح این کمین جدید آورده شده است.
ما یک درایو شبکه "Z:\work\baza" داریم که به کامپیوتر متصل است. این یک آنالوگ کامل از مسیر شبکه "//server/work/baza/" است.
ما ساده ترین کد برنامه را در PHP برای باز کردن دایرکتوری راه دور می نویسیم. بدون هیچ گونه ODBC. بنابراین می توانید به سادگی بررسی کنید که آیا کار می کند یا خیر:
OpenDir ("Z:\work\baza"); //پیغام خطا می دهد
OpenDir ("//server/work/baza/"); //بدون خطا

این سوال جدید من است. من چه غلطی می کنم؟ در هر صورت، استفاده از "ODBC Administrator" ویندوز برای اتصال منابع شبکه امکان پذیر نخواهد بود، یا هنوز به نحوی ممکن است؟ تکرار می کنم، کمین اکنون فقط با املای صحیح مسیرهای منابع شبکه باقی می ماند. شاید تنظیمات جداگانه ای از خود رابط PHP مسئول این لحظه باشد؟

دیدگاه ها