دوره مجازی PHP (جلسه 16): کار با پایگاه داده - آشنایی با زبان SQL



visibility  
mode_comment   ۶۳

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

در این جلسه به تشریح موارد زیر خواهیم پرداخت :

فصل 13 : کار با پايگاه داده ي MySQL و چگونگي اتصال PHP به ديتابيس

  • معرفي سيستم مديريت پايگاه داده ي MySQL
  • آشنايي با ابزار PhpMyAdmin و مديريت جداول پايگاه داده به صورت دستي
  • انجام 4 عمل اصلي پايگاه داده (CRUD) در محيط PhpMyAdmin
  • انجين هاي ذخيره سازي جداول و معايب و مزاياي هر کدام (InnoDB vs MyISAM)
  • معرفي ويژگي هاي مختلف يک ستون از جداول پايگاه داده (نام، نوع، سايز، مقدار پيشفرض و ...)
  • تشريح انواع داده ها (DataTypes) در SQL
  • SQL : زباني براي درخواست اطلاعات و انجام تغيرات در پايگاه داده (Query Language)
  • آموزش زبان SQL : آموزش انجام اعمال اصلي در پايگاه هاي داده (CRUD) با زبان SQL
  • ساخت جداول پايگاه داده (Create)
  • شرح دادن جداول پايگاه داده و ديدن اطلاعات آنها (Describe)
  • حذف جداول پايگاه داده (Drop)
  • خواندن اطلاعات جداول پايگاه داده (Select)
  • درج و ويرايش مقادير در جداول پايگاه داده (Insert & Update)
  • حذف مقادير از جداول پايگاه داده (Delete)
  • ايجاد نسخه ي بکاپ از پايگاه داده و جداول آن
  • ريستور کردن پايگاه داده از بکاپ هاي گرفته شده
  • اجراي دستورات SQL در محيط PhpMyAdmin
info توجه

این مطلب یک جلسه از آموزش زبان برنامه نویسی php می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش زبان برنامه نویسی php

comment دیدگاه کاربران
na3r replyپاسخ

سلام استاد آوند
من یه کامنت در 2 جلسه پیش داده بودم هنوز تایید نشده لطفا چک بفرمایین:


http://www.7learn.com/tutorials/php-class-part14-files/comment-page-1#comment-23549

لقمان آوند

تائید و پاسخ داده شد .

na3r replyپاسخ

و اگه بشه پیش از تایید و برای مدت کوتاهی (مثل برخی وبسایت ها) امکان ویرایش نظرات رو داشته باشبم خیلی خوب میشه و اشتباه کامنت بالا اتفاق نمیفته!

لقمان آوند

امکان سنجی و بررسی می کنیم .
ممنون

na3r replyپاسخ

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

لقمان آوند

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

na3r replyپاسخ

استاد جلسه 17 رو آپلود نمی کنین..؟

لقمان آوند

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

امین کاظمی replyپاسخ

استاد وقتی ایمپورت میکنم یه ارور بهم میده در مورد تنظیمات دستی و ورژن مای اس کیو ال. باید چیکار کنم؟ اصلا نمیتونم ایمپورت کنم.

about mySQL DBMS

PhpMyAdmin (localhost, cpanel, directadmin)

MyIsam vs InnoDB

Column Attributes (name, type , size , …)

#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘about mySQL DBMS

PhpMyAdmin (localhost, cpanel, directadmin)

MyIsam vs I’ at line 1

لقمان آوند

خطی که ارور میده رو با قرار دادن — کامنت کن .

آرمین replyپاسخ

آقای آوند من یه فایل sql ساختم که محتواش به صورت زیر :


ولی وقتی اون در صفحه اول phpmyadmin ایمپورت میکنم ارور میده اونطوری که من تو فایل نوشتم باید اول دیتابیس market ساخته بشه و بعد سه تا جدول توش ایجاد بشه ولی نمیدونم مشکل از کجاست میشه راهنماییم کنید ؟

لقمان آوند

چه اروری میده؟ متن ارور رو هم بهم بده …

آرمین

این ارور رو میده یه مشکل دیگه که هست اینه که ارور ها رو با کاراکتر های ناشناخته نمایش میده :
#1046 – Aucune base n’a été sélectionnée

لقمان آوند

من بدون مشکل ایمپورتش کردم. این ارورت به نظر میرسه به یه زبون دیگه غیر انگلیسی هست.
دیتابیس رو دستی بساز و برو تو همون دیتابیس و ایمپورت کن ببین هنوز این مشکله وجود داره . (دستور ساخت و استفاده از دیتابیس رو از اول کدت بردار)

آرمین replyپاسخ

یه سوال دیگه هم داشتم در sql چطوری میشه encoding یک column رو utf-8_general_c قرار داد ؟

لقمان آوند

سلام
پاسخ این سوال رو ببینید.

آرمین replyپاسخ

آقای آوند من یه سوال ازتون پرسیدم چرا تایید نمی کنید :
http://www.7learn.com/tutorials/php-class-part16-db-sql/comment-page-1#comment-26050

لقمان آوند

پاسخ داده شد.
اروری که میده رو بهم بگو.

رضا ایرانی replyپاسخ

سلام
میخوام وقتی کاربر یک دیتا (مثل اسم ) از طریق فروم تک فیلدی ارسال میکنه اول چک کنه که این دیتا تو دیتابیس هست یانه اگه بود که ارور بده و اگه نبود اطلاعات رو سیو کنه و دیتای جدید رو بخواد
این فایل شرطی به خصوص چک کردن موجود بودن دیتا(اس ام اس) چیه ؟
البته من تو حالت UNIQUE گذاشتم ولی اجرا میکنم کلا ارور میده و نمیتونه دیتای های بعدی رو بخواد

لقمان آوند

سلام
قبل از ثبت توی دیتابیس یه کوئری count(*) روی اون فیلد بزنید. اگه عددی بیش از 0 رو برردوند یعنی وجود داره …
چک کردن اینکه کاربری با نام علی وجود داره یا نه. اگر باشه عددی بیش از 1 برگردونده میشه.
select count(*) from person where name="ali"

رضا ایرانی

میخوام وقتی تعدادی ایمیل که با کاما جدا شده و با فیلد ارسال میکنم ایمیل های تکراری تو دیتابیس ذخیره نشه
اروری که هم میده :
mysql_num_rows() expects parameter 1 to be resource, boolean given in index.php on line 25

که مروبط به

که تنها FALSEو TRUE
میگره
ولی به درستی کار میکنه

ممنون میشم بگید ایراد کار کجاست

محتویات

config

محتویات
index

اینم کوئری که برای ایجاد جدول استفاده میکنم

لقمان آوند

سلام
قبل از ثبت ایمیل جدید تو دیتابیس یه کوئری بزنید ببینید ایا این ایمیل قبلا ثبت شده یا نه. اگر نبود اضافش کنید.
تو دوره که گفتیم به جای mysql از mysqli استفاده کنید که جدیدتره و منسوخ نیست !
تابع mysql_num_rows هم به عنوان پارامتر باید کانکشن mysql رو بگیره نه کوئری رو !

رضا ایرانی

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

الان که غیر فعال کردم ارور نمایش داده نمیشه
و اسکریپت به درستی کار میکنه
ارور مهم که نیست ؟

لقمان آوند

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

حمید نقی پور replyپاسخ

سلام استاد
در دستور ساخت جدول به صورت sql
یه دستور check فرمودین که محدود میکرد ورودی فیلد جدول رو که سن ها بزرگتر از 9 باشه مثلا
این مورد رو وقتی داریم به صورت دستی جدول می سازیم
از کجا باید اعمال کنیم روی اون فیلد ؟
ممنون

لقمان آوند

با استفاده از یه کوئری ساده میتونید اینکارو بکنید :
ALTER TABLE Persons ADD CHECK (age>0)

صاحب اصغریان replyپاسخ

من برای ایجاد جدول دقیقا همون کدهای شما رو وارد میکنم ولی این خطارو میده چرا؟
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

وحید صالحی

سلام ارور میگه از Syntax اشتباه استفاده کردین کدهاتون رو چک کنید…

mohamad mohamadi replyپاسخ

سلام ببخشید مثلا من 1 فرم ساخت اکانت ساختم چجوری اونو بفرستم تو جدول های دیتا بیسم که برام اطلاعاتش ذخیره شه

لقمان آوند

اگر جلوتر برید مثال ها و نمونه هاش رو خواهید دید …

Amir Saleh replyپاسخ

سلام آقای آوند خسته نباشید
من وقتی وارد محیط phpMyAdmin می شم در تب Databases می خوام دیتا بیس بسازم زیر قسمت Create database با رنگ قرمز نوشته شده No Privileges و همچنین در قسمت تب ها من تبی به اسم Users ندارم
ممنون از راهنماییتون

لقمان آوند

شما باید با یوزر root وارد بشید که دسترسی داشته باشید

mohamad mohamadi replyپاسخ

سلام من اصلا نفهمیدم 1چیو
مثلا تو پوشه ی www
دارم 1 سایت میسازم و 3تا دیتا بیس تو phpmyadmin میسازم 1کیش مثلا اسمش
H
1کی دیگه P
1کی دیگه S
میخوام سایتمو به P متصل کنم چه کدی بزنم؟

وحید صالحی

خوب شما باید رشته اتصال به دیتابیس رو برای دیتابیسی که نام p هست ست کنید

محمدمهدی جبارپور replyپاسخ

سلام
چطور میشه تصاویر رو تو دیتابیس ذخیره کرد و از اون استفاده کرد

وحید صالحی

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

لینک 1
لینک 2
لینک 3

محمدمهدی جبارپور

ممنون

محمدمهدی جبارپور replyپاسخ

سلام
من وقتی می خوام داده های فارسی رو از دیتابیس دریافت کنم بجاش علامت ؟ میاره. دیتابیس رو بر روی utf8-general-ci قرار دادم.

لقمان آوند

اول کدتون این کوءری رو بزنید قبل از کوئری های دیگه
set names utf8

محمدمهدی جبارپور

ممنون

Eagle Seein replyپاسخ

سلام استاد من بازم با دیتابیس مشکلپیدا کردم.
من تو یه جدولی پنج تا فیلد به شرح زیر دارم:
id-user_id-to_user_id-projct_id-message
میخوام که یه کاربر نتونه تو یه پروژه دوبار پیام بفرسته. یعنی user_id و project_id باید با همدیگه یونیک بشن. از طرف یگه لازم دارم که id اتواینکرمنت باشه. فرضا:
id=1–user_id=1–project_id=1
دوبار درج نشه اما به محض تغییر user_id یا project_id درج بشه مثلا
id=2–user_id=1–project_id=2
یا
id=3–user_id=2–project_id=1
درج بشه. فیلد ای دی صرفا فقط زیا میشه و از اونجایی که A_I کردنش منجر به کلید شدن اصلیش میشه من یه خوره گیج شدم.
میشه راهنماییم کنین؟

لقمان آوند

قبل از ثبت پیام جدید، موجود بودن سطری با دو ستون user_id و project_id رو با یه سلکت ساده چک کن. اگر نبود پیام رو ثبت کن و اگر قبلا بود به کاربر یه متنی نشون بده که قبلا برا این پروژه پیام داده.
تو مورد دوم هم باز از طرق کد باید اینکار بکنی. البته منظورتو دقیق متوجه نشم و یکم برام مبهمه…

Eagle Seein

سلام استاد ممنون از پاسختون. هدف کلیم اینه که میخوام یه کاربر فقط بتونه یه پیام برای هر پروژه بزاره و نه بیشتر. یعنی راهی نیستش که از دستکاری فیلدای دیتابیس اینکار رو کرد؟ همش از طرف کد باید بررسی بشه؟

لقمان آوند

سلام
راه توصیه شده منطقی و صحیح هست و زیاد استفاده میشه در پروژه های وب.
در عین حاد در خود mysql هم میشه function و procedure نوشت که این موارد رو باهاش کنترل کرد. که نیاز به آشنایی نسبتا حرفه ای شما با این موارد داره.

Eagle Seein

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

ممنونم استاد

leo vartoomian replyپاسخ

با سلام
استاد من موقعی که اطلاعات را میخواهم درون دیتابیس insert کنم بهم ارور زیر را میدهد.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘1’ at line 1

query :
( ‘insert into tb1(name,family,tel) values (‘$name’,’$family’,’$tel

ستون های دیتابیس :

id’ int auto increment’
name varchar
family varchar
tel varchar

لقمان آوند

کوئری رو درون یه متغیر بریزید و چاپ کنید ببینید اون چیزی که اجرا میشه چی هست …

leo vartoomian

استاد درون متغیر result ریختم و آن را echo کردم عدد 1 چاپ شد. !!

لقمان آوند

سلام
منظورم این بود که خود کوئری (رشته ی کوئری) رو چاپ کنید نه نتیجه اجرای اون رو …

leo vartoomian

استاد ممنون خودم پیدا کردم جوابش را

leo vartoomian replyپاسخ

با سلام
استاد چگونه میتونم اطلاعات یک رکورد را که از دیتابیس میخونم داخل textbox قرار بدم؟
یعنی چجوری مشخص کنم اطلاعات این ستون درون textbox مربوطه قرار گیرد.

لقمان آوند

اطلاتی که گرفتی درون یک متغیر بزار و اونو در ویژگی value تگ input مربوطه چاپ کن.

رضا الطافی replyپاسخ

سلام جناب آوند خسته نباشید
من آخر نفهمیدم index ها چی هستن و چه فایده ای برای ما دارن ؟ چرا باید ازشون استفاده کنیم ؟ مثلا اگه به ستون id ها یه ایندکس با نام row_id بدیم چه مزیتی میتونه داشته باشه ؟

لقمان آوند

ایندکس مثل فهرست کتاب می مونه. اگر نباشه پیدا کردن یه مبحث خاص تو اون کتاب چقدر سخت و وقت گیره ؟؟؟
دقیقا تو دیتابیسم همینطوره برای اینکه یه داده ها زودتر پیدا شن اول از ایندکسشون استفاده میشه که مستقیما برسن به آدرس داده و نیازه نباشه کل داده ها جستجو بشه!

sadra hakim replyپاسخ

سلام استاد
با دستور ALTER میتونیم ستون های جدیدی ایجاد یا حذف و یا ویرایش کنیم. پس ویرایش با این دستور چه فرقی در ویرایش با دستور UPDATE داره ؟
من الان فرق این 2 تا دستور رو نمیفهمم ( هر دوشون میتونن ویرایش کنن که !)

مصطفی replyپاسخ

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

تا حدی این مسئله برام مشکل ساز شده که کلا آموزشتون رو نصفه ولش کردم چون دیگه نمیتونم باهاش ارتباط برقرار کنم. حالا ان شاالله که در ادامه دوباره آموزش هاتون برگرده به اوج. (هر چند که یکی از کاربرا نوشته بودند که جلوتر هم توی مخصوصا قسمت پروژه ها کدها از قبل نوشته هستند و فقط توضیح میدید. این به نظرم ضعف خیلی بزرگی هست)

ازتون خواهش دارم توی آموزش های جدید این موضوع رو هم مد نظر قرار بدید. لطفا کیفیت رو فدای کمیت نکنید …

تشکر از شما

Alireza Shahsavary replyپاسخ

سلام استاد وقتتون بخیر
من از xampp استفاده میکنم و وقتی shell رو باز میکنم نمیتونم از <mysql استفاده کنم
و اینکه اجرا میکنم mariadb بالا میاد ، میشه راهنمایی کنید چیکار باید بکنم؟

Seyed Reza Bazyar replyپاسخ

سلام
فرض کنید یه فایل index.php دارم که توی اون ابتدا یه دیتابیس فراخوانی میشه. سپس پایین ترش از دیتابیس اطلاعاتی رو از دیتابیس میگیره و نمایش میده
اجرا شدن دیتابیس و کد و… همگی در یک فایل index مشکلی نداره؟

لقمان آوند

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

محمدحسین بیطرفان replyپاسخ

سلام. ممنون از آموزش خوبتون.
سوالی که دارم اینه که در پایگاه داده وقتی یک ستون رو not nulll تعریف میکنیم یعنی اینکه نمیتونه خالی بمونه.
اما وقتی از طریق php یک رکورد insert میکنم و یک ستون که not null هست رو خالی میگذارم قبول میکنه و رکورد رو میسازه.مگه نباید خطا بده ؟
پس کاربرد not null کجاست دقیقا ؟
سپاس

محمدحسین بیطرفان replyپاسخ

سلام . چرا سوال من پاسخ داده نمیشه ؟ لطفا بررسی شود. سپاس

هادی فیروزی وند replyپاسخ

با سلام و خسته نباشید.
وقتی می خواستم جدولی رو توی دیتابیس Export کنم امکان انتخاب sql نبود چون این گزینه موجود نبود. چطوری می تونم این مشکل رو برطرف کنم؟؟؟

هادی فیروزی وند replyپاسخ

با سلام و خسته نباشید.
وقتی می خواستم جدولی رو از دیتابیس، Export کنم امکان انتخاب فرمت sql نبود چون این گزینه موجود نبود. چطوری می تونم این مشکل رو برطرف کنم؟؟؟

ارسال نظرات

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