شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 GMT +3:30

ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL

mysql-create-table

شیوه دستی ایجاد پایگاه داده در برنامه phpMyAdmin به خودی خود روش مناسبی است اما برنامه نویسان وب عموما با کدنویسی و دنیای کدها سر و کار دارند و تمرکز آموزش های پیش رو نیز در همین چارچوب است، برای ساخت دیتابیس، جدول و ستون در برنامه نویسی PHP باید از دستور CREATE استفاده کنیم، CREATE یکی از دستورات آشنا در زبان SQL است که به کمک آن می توانیم دیتابیس، جدول و ستون های مورد نظر را با اجرای کدهای برنامه نویسی در MySQL و به کمک اکستنشن های متداول ایجاد کنیم، دقت کنیم همانطور که قبلا گفتیم پایگاه داده MySQL با اکستنشن MySQL دو مفهوم جداگانه هستند، عبارت اول اشاره به سیستم مدریت پایگاه داده MySQL دارد اما عبارت دوم یک برنامه کوچک نرم افزای در مفسر PHP است که به این زبان قابلیت ارتباط با پایگاه داده را می دهد، اکستنشن MySQL اولین اکستنشن PHP برای این منظور بوده و در حال حاضر منسوخ و قدیمی شده است، لذا بهتر است از اکستنشن های جدید مانند MySQLi یا PDO استفاده کنیم.

ساخت دیتابیس با دستور CREATE DATABASE در MySQL


علاوه بر شیوه دستی ساخت دیتابیس از طریق برنامه phpMyAdmin، کدهای PHP نیز چنین قابلیتی دارند که با برنامه نویسی بتوانیم دیتابیس مورد نیازمان را بسازیم، این کار با دستور CREATE DATABASE صورت می گیرد که در زیر دیتابیس فرضی dbname را به این روش ساخته ایم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //ساخت دیتابیس
    $sql = "CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci";
    $query = mysqli_query($conn, $sql);
    if(!$query) {
        echo "Creating Database dbname: Error! " . mysqli_error($conn);
    } else {
        echo "Creating Database dbname: OK!";
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //ساخت دیتابیس
    $sql = "CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci";
    $conn->query($sql);
    if(!$conn) {
        echo "Creating Database dbname: Error! " . $conn->error;
    } else {
        echo "Creating Database dbname: OK!";
    }
}
//پایان اتصال
$conn->close();
?>
همان طور که در نمونه کد بالا ملاحظه می کنید دستور CREATE به تنهایی کاربردی ندارد و در کنار پارامترهای دیگر کامل می شود، برای ساخت دیتابیس باید در کنار CREATE از دستور DATABASE استفاده کنیم، همچنین برای اعمال تنظیمات دلخواه پارامترهای دیگری مانند DEFAULT CHARACTER SET و COLLATE استفاده شده که کارکرد مشابهی با حالت دستی در برنامه phpMyAdmin دارند، این دستورات یونیکد پیش فرض دیتابیس را تعیین می کنند که برای سازگاری با زبان فارسی باید مقدار utf8 و utf8_persian_ci برای آنها در نظر گرفته شود، ci در عبارت utf8_persian_ci مخفف case-insensitive و به معنی غیرحساس به حروف بزرگ و کوچک است.
نکته 1: قبل از اجرای دستورات باید اطلاعات مورد نیاز را در قسمت username و password مطابق با حساب کاربری پایگاه داده در کد جایگزین کنیم، در لوکال هاست نام کاربری معمولا root و بدون کلمه عبور است، همچنین در قسمت dbname می توانیم نام دیگری برای پایگاه داده در نظر بگیریم.
نکته 2: تابع mysqli_query و متد query در اکستنشن MySQLi جهت اجرای فرآیند پرس و جو بین کدهای PHP و دیتابیس MySQL کاربرد دارند.

ساخت جدول و ستون با دستور CREATE TABLE


پس از ساختن دیتابیس با دستور CREATE DATABASE نوبت به ایجاد جداول و ستون ها است که این کار با دستور CREATE TABLE انجام می شود، در نمونه کد زیر با استفاده از این دستور جدول فرضی tblname را با چند ستون id، name و status ساخته ایم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //ساخت جدول و ستون ها
    $sql = "CREATE TABLE tblname(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    status TINYINT(1) DEFAULT 0)
    ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci"
;
    $query = mysqli_query($conn, $sql);
    if(!$query){
        echo "Creating Table tblname: Error! " . mysqli_error($conn);
    } else{
        echo "Creating Table tblname: OK!";
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
    
    //ساخت جدول و ستون ها
    $sql = "CREATE TABLE tblname(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    status TINYINT(1) DEFAULT 0)
    ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci"
;
    $conn->query($sql);
    if(!$conn) {
        echo "Creating Table tblname: Error! " . $conn->error;
    } else {
        echo "Creating Table tblname: OK!";
    }
}
//پایان اتصال
$conn->close();
?>
در کد بالا پرس و جوی ساخت یک جدول با سه ستون id، name و status را اجرا کرده ایم و به هر ستون ویژگی هایی را متناسب با نوع و کارکرد آن نسبت داده ایم که در این مرحله از آموزش صرفا جهت آشنایی اولیه به توضیح مختصر آنها می پردازیم، مواردی مانند INT، VARCHAR و TINYINT نشان دهنده نوع داده ای است که در آن ستون ذخیره می شوند، در خصوص انواع داده در MySQL در آموزش های بعدی به طور خاص صحبت خواهیم کرد، پارامتر NOT NULL به این معنی است که ردیف های اطلاعاتی به صورت پیش فرض NULL یا خالی نیستند، AUTO_INCREMENT نیز به این معنی است که مقدار این ستون با هر INSERT اطلاعات به صورت پیش فرض افزایش پیدا می کند و نیازی به مقداردهی آن در هنگام اجرای پرس و جو نیست، پارامتر PRIMARY KEY نیز یک سیستم در MySQL است که کلید اصلی را مشخص می کند، منظور از این عبارت ایجاد کلیدهای منحصر به فرد جهت دسته بندی بهتر و جستجوی سریع تر در بین ردیف های اطلاعاتی است، در این سیستم هر ردیف در هر جدول یک کلید منحصر به فرد خواهد داشت که در هنگام بازیابی اطلاعات کار جستجو بسیار سریع تر خواهد شد، از پارامتر DEFAULT برای درج یک مقدار پیش فرض به صورت خودکار استفاده می شود، در این نمونه کد عدد 0 به عنوان مقدار پیش فرض برای ستون status در نظر گرفته شده است، پارامتر ENGINE=MyISAM برای تنظیم موتور MyISAM به عنوان موتور پیش فرض برای جدولی است که قصد ایجاد آن را داریم (Syntax آن در برخی نسخه ها به صورت TYPE=MyISAM است، در MySQL به طور معمول دو موتور MyISAM و INNODB استفاده می شوند).
نکته 1: تابع mysqli_connect در دستور CREATE TABLE چهار آرگیومنت دارد که مورد آخر نام دیتابیسی است که می خواهیم در آن جدول ساخته شود، در اینجا دیتابیسی که قبلا با دستور CREATE DATABASE ساخته بودیم (dbname) را به عنوان آرگیومنت چهارم درج کرده ایم.
نکته 2: هر درخواستی که از دیتابیس انجام می شود را در اصطلاح پرس و جو یا Query می نامند، MySQL در پرس و جوهای خود از زبانی به نام SQL استفاده می کند که مخفف Structured Query Language است.
دسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
اتصال PHP به MySQL با اکستنشن MySQLi
انتخاب ردیف ها با دستور SELECT در MySQL
استفاده از WHERE در پرس و جوی MySQL
به روز رسانی ردیف ها در MySQL با UPDATE
محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
دیدگاه
more ۷۷ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
رضا
۱۸:۵۳ ۱۳۹۵/۰۴/۰۱
سلام خسته نباشید
آیا ذخیره کردن کدهای یک قالب html در mysql می تونه دچار مشکل امنیتی بشه ؟
برای کاربر نه برای سایت منظورم این هست که هکر می تونه با ذخیره این کد ها، دستوراتی رو وارد کنه که در جدول mysql اجرا بشه ؟
در query خیر بعد از ذخیره شدن در مای اس کیو ال اجرا بشه ؟
کلا ذخیره کد های قالب در mysql پیشنهاد میشه ؟
می دونم شاید سئوال ابتدایی و ساده ای رو پرسیدم اما اگر راهنمایی کنید ممنون میشم
متشکر
نماز روزتون قبول
ذخیره کدهای HTML به خودی خود هیچ مشکلی ایجاد نمی کند، منتها بر طبق اصل کلی باید نکات امنیتی دیتابیس و ایمن سازی داده ها قبل از ذخیره در دیتابیس به خوبی رعایت شود، به طور مثال با توجه به اکستشن استفاده شده (MySQL, MySQLi, PDO) باید یکی از روش های ایمن سازی داده مانند استفاده از تابع mysqli_real_escape_string یا bindValue و prepare (در روش شی گراء اکستنشن MySQLi و اکستنشن PDO) استفاده شود، همچنین توابعی مانند base64_encode برای رمزی کردن مقادیر و base64_decode برای بازگشت به حالت اولیه می تواند مورد استفاده قرار گیرد (البته ضروری نیست).
Pouya
۰۴:۳۸ ۱۳۹۵/۰۳/۲۲
سلام. اگر یک تیبل قبلاً وجود داشته باشه و یک متغیرش خالی باشه، بخوایم اول اون تیبل رو با متغیر اول شناسایی کنیم و بعد متغیر دوم رو براش تعریف کنیم چطوریه؟
مثلاً یه تیبل بنام car داریم. توی این تیبل 3 ستون داریم
ID - car_name - color
مثلاً آیدی و نام ماشین قبلاً درش مقدار وارد شده و مقدار color خالی/NULL هست در دیتابیس. حالا میخوام یه فرم ایجاد کنم که کاربر با وارد کردن نام (که اختصاص خودشه) در یک فیلد و وارد کردن مقدار دیگه در color, مقدار color براش تعریف و ذخیره بشه.
در این صورت باید از دستور UPDATE و تعیین ID مورد نظر با WHERE در MySQL استفاده کنید، یک فرم HTML در سمت کاربر که ID فیلد به عنوان یک input ترجیحا hidden در آن تنظیم شده باشد، کدنویسی PHP جهت دریافت اطلاعات و اجرای پرس و جوی MySQL نیز مورد نیاز خواهد بود.
هنر
۲۳:۰۳ ۱۳۹۴/۰۷/۲۱
مشکلی تو ارتباط با دیتابیس نیست
دستوراتی رو هم که گذاشتین قبلا استفاده کردم جوابی نگرفتم
حالا یکم بیشتر بررسیش میکنم شاید مشکل از جای دیگه ای باشه
ممنون بابت پاسخ
------
یه سوالی دیگه ای هم داشتم که ربطی به این قسمت نداره
سوال به علت غیر مرتبط بودن و عدم امکان تست به جهت درهم و ناکافی بودن اطلاعات درج شده حذف شد! در صورت تمایل فایل ها را روی سرور خود آپلود کرده و اطلاعات یک اکانت موقت را ارسال کنید تا بررسی گردد.
هنر
۱۲:۲۲ ۱۳۹۴/۰۷/۲۱
خسته نباشی
اول از هر چیزی این کد رو ببینید
if($action=="addsave")
{
$username=chkstr($_GET["username"],1);
$content=chkstr(HTMLSpecialChars($_POST["content"]),1);
$contact=chkstr(HTMLSpecialChars($_POST["contact"]),1);
$ly=substr(chkstr(urldecode($_GET["ly"]),1),0,255);
$currweb=substr(chkstr(urldecode($_GET["currweb"]),1),0,255);
if($content=="") alertclose("لطفا عنوان پیام را وارد کنید");
if($contact=="") alertclose("لطفا متن پیام را وارد کنید");
//دریافت آی پی کاربر
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$userip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$userip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$userip = $_SERVER['REMOTE_ADDR'];
}
//دریافت نام مروگر کاربر
//$browser=$_SERVER['HTTP_USER_AGENT'];
$sql="select count(*) from stat_fghddd where username='$username' and content='$content' and contact='$contact' and TO_DAYS(NOW())-TO_DAYS(addtime)=0";
$result=mysql_query($sql);
$rs=mysql_fetch_row($result);
if($rs[0]>0) alertclose("شما قبلا پیامی با این محتوا را ارسال کرده اید");
$sql="insert into stat_fghddd (username,content,contact,ly,userip,currweb,addtime) values ('$username','$content','$contact','$ly','$userip','$currweb','".date("Y-m-d H:i:s")."')";
mysql_query($sql);
alertclose("پیام شما ارسال شد در صورت نیاز مدیر سایت با شما تماس خواهد گرفت");
}
من که هر چقدر نگاش میکنم مشکلی توش نمی بینم!
بعد از insert کردن تو دیتابیس خط اخر یه پیام گذاشتم ؛ پیام شما ارسال شد در صورت ...؛ اونو هم نشون میده بعد از کلیک کردن روی دکمه ارسال ولی هیچی ثبت نمیشه
اینم دیتابیس :
CREATE TABLE IF NOT EXISTS `stat_fghddd` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`content` text NOT NULL,
`contact` text NOT NULL,
`ly` varchar(255) NOT NULL,
`code` varchar(255) NOT NULL,
`userip` varchar(255) NOT NULL,
`status` varchar(255) NOT NULL,
`currweb` varchar(255) NOT NULL,
`addtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=31 ;
میدونید جالبیش چیه تو لوکال هاست کار میکنه ولی تو هاست واقعی همون آنلاین اینطوری شده تک تک ورژن های php هاستم رو هم تست کردم هر بار قبل ارسال ولی بازم اخرین پیام میاد میگه ارسال شد پیامتون ولی در واقع هیچی تو جدول ذخیره نشده
به نظرتون کجاش ایراد داره؟
برای پیدا کردن علت خطا باید با شیوه های خطایابی در PHP آشنا باشید، به طور مثال برای نمایش خطای MySQL تابع mysql_error را به پرس و جوی خود اضافه کنید:
mysql_query($sql) or die(mysql_error($con));
نکته: متغیر con همان متغیری است که اتصال به پایگاه داده را انجام می دهد.
همچنین در ابتدای کدهای PHP دستور زیر را قرار دهید تا تمام خطاهای احتمالی نمایان شوند:
error_reporting(-1);
نکته: اکستنشن MySQL قدیمی و منسوخ شده است، توصیه می شود از MySQLi یا PDO استفاده کنید.
homy
۲۲:۵۸ ۱۳۹۴/۰۶/۲۰
سلام من میخوام فرمی بسازم که به کاربر پیغامی رو ارسال کنم و این پیغام در دیتابیس ذخیره بشه و بعد کاربر در صفحه خودش ببیند مشکلم ذخیره id کاربر همراه داده های فرم پیغام هست اما id کاربر ذخیره نمیشه و کاربرا نمیتونن پیغامی که فقط مختص خودشون هست رو ببینند
مشخص نیست میزان آشنایی شما با مباحث وب تا چه حدی است، اما مشکلی که مطرح کرده اید نیاز به آشنایی با بحث کار با فرم ها در HTML + PHP، همچنین نحوه ذخیره اطلاعات در دیتابیس با دستور INSERT و اختصاص ID یکتا و مدیریت کاربران است، در واقع سوالتان از چند بخش تشکیل شده که هر بخش خود مبحث مفصل و جداگانه ای دارد!
هادی
۱۸:۳۶ ۱۳۹۴/۰۶/۱۳
من یک بانک اطلاعاتی با دو جدول ساخته ام . یکی از جدول ها اطلاعاتش رو میتونم استخراج کنم ولی یکی دیگه موقع مشاهده جدول خطا میگیره
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files  
(x86)\EasyPHP-12.00\www\test1.php on line 25
نمیدونم چرا
متن خطا مشخص است! متغیری که به عنوان پارامتر به تابع mysql_fetch_array می دهید باید یک پرس و جوی MySQL باشد، اما ظاهرا خطایی در این اتفاق وجود دارد (تنها با بررسی و دیدن کدها قابل تشخیص است) که FALSE برگردانده می شود.
نکته: اکستنشن MySQL قدیمی و منسوخ شده است، توصیه می شود از MySQLi یا PDO استفاده کنید.
امین
۲۳:۰۹ ۱۳۹۴/۰۶/۱۱
ببینید من داخل خوده mysql کواری میزنم جواب نمیگیرم به اون دو تا کاراکتر. بقیه کاراکترها مشکلی نداره.
data type هم nvarchar گذاشتم ..
text و ... هم گذاشتم نشد.
در این صورت باید این موارد را به صورت دستی ایمن سازی کنید، یعنی به جای @ از @\ و به جای \ از \\ استفاده کنید!
امین
۰۲:۵۰ ۱۳۹۴/۰۶/۱۱
سلام استاد یک سوال :
من یه رشته ها حاوی علامت @ و / و رو میخوام به عنوان پسورد تو بانک ذخیره کنم - که ذخیره میشه.
اما موقع خوندن و کواری گرفتن به هیچ وجه خروجی نمیده. یعنی میگه همچین رشته ای در بانک نداریم !!!! ولی وقتی این علامت ها رو پاک میکنم درست میشه.
خب چکار کنم برای این مشکل؟
جالب اینکه علامت # و $ رو مشکلی نداره باهاش
هرچند بدون بررسی کدهای شما نمی توان پاسخ دقیقی ارائه کرد، اما معمولا این موارد از ایمن سازی نکردن اطلاعات هنگام ثبت در دیتابیس است، به طور مثال در اکستنشن MySQL باید متغیر را پیش از استفاده در پرس و جو با تابع mysql_real_escape_string ایمن سازی کنید یا در PDO از روش هایی مانند bind و prepare استفاده نمائید، علاوه بر این موارد دقت کنید که Data Type مناسبی برای ستون مورد نظر تنظیم کرده باشید، به طور مثال برای داده های متنی TEXT، VARCHAR و... مناسب هستند.
مهدی
۲۳:۱۷ ۱۳۹۴/۰۲/۲۷
سلام
من میخوام از یک فرم دیتا رو به دو تیبل ارسال کنم که تیبل اولی پرینت و دومی چایلد است یعنی همون دیتای تیبل چایلد یک foreign key از primary key پرینت به خود دارد. از کدام کوئری استفاده کنم که دیتای پرینت به همان تیبل پرینت و از چایلد به تیبل چایلد ارسال و ذخیره گردد. ممنوم میشم اگه ز‌ود پاسخ بدین.
هرچند ساختار دیتابیس شما دقیقا مشخص نیست (اینکه چه ستون های دیگری به جزء موارد گفته شده وجود دارند) و بخش آخر سوال (...و از چایلد به تیبل چایلد ارسال و ذخیره گردد...) مبهم است! اما با توجه به برداشت ما شاید کد زیر مناسب یا راهنما باشد:
INSERT INTO `print` (name) VALUES ('Your Name');
INSERT INTO `child` (key, family) VALUES (SELECT(id FROM `print` WHERE name = 'Your Name'), 'Your Family');
نکته: دو پرس و جو مستقل باید اجرا شوند.
مصطفی شربتی
۰۱:۴۳ ۱۳۹۴/۰۱/۱۶
با سلام
من یه فرم ساختم که این فرم به دیتابیس وصل هست ولی هر کاری می کنم اطلاعات وارد شده در فرم به دیتابیس ایمپورت نمیشه. اگه راهنمایی بفرمائید مشکل از کجاست ممنون میشم
حذف شد
بدون اطلاع از ساختار دیتابیس و تست و بررسی نمی توان پاسخی ارائه کرد، آنچه از Syntax دستورات شما مشخص است از روش شی گرا برای اتصال به دیتابیس استفاده شده (که این یعنی بخش اصلی کدها در قسمت دیگری است)، همچنین به نظر متغیر message در هیچ قسمتی تعریف نشده!
باران
۲۳:۰۶ ۱۳۹۳/۱۲/۰۵
ممنون این اشکالات رو رفع کردم درست شد.
مشکل جدید اینه که وقتی دکمه ثبت رو میزنم با وجود اینکه یک سطر از جدول رو اشغال میکنه اما هیچ کدوم از اطلاعات فرم ذخیره نمیشه.
این مشکل برای فرم هایی که قراره اطلاعاتشون در بیش از یک جدول درج بشه اتفاق می افته. حتی خواستم برای امتحان فقط اطلاعات در یک جدول درج بشه بازم همون اتفاق افتاد.
باید روش های خطایابی در PHP را بلد باشید، به طور مثال از متغیرها خروجی بگیرید و مطمئن شوید مقادیر به درستی از فرم دریافت می شود، در کل حل این نوع موارد نیاز به بررسی و تست دارد.
باران
۱۲:۵۸ ۱۳۹۳/۱۱/۳۰
سلام
من یه مشکلی دارم:
دستوری که برای select در فرمم مینویسم اجرا میشه و هیچ مشکلی نداره اما دستور insert اجرا نمیشه. یعنی کدها اروری ندارن و اتصال بانک هم برقراره اما اطلاعاتی در پایگاه درج نمیشه.
خواهش میکنم کمکم کنید. عجله دارم.
این فرم درج کاربر هست.
حذف شد
به دو نکته باید توجه کنید، نکته اول استفاده نکردن از علامت ' یا Single Quotation برای نام جدول و ستون ها در پرس و جو است و نکته دوم استفاده از تابع mysqli_error مطابق نمونه کدهای آموزش (جهت نمایش خطاهای احتمالی).
سید هدایت محمدی
۱۶:۲۱ ۱۳۹۳/۱۱/۱۳
با سلام
ببخشید من هر کاری می کنم هیچ حرفی داخل جدول دیتابیس ذخیره نمیشه ولی عدد ذخیره میشه حتی تو دستوارتم از کد فارسی ساز هم استفاده کردم تو خود سایت هم از تگ متا استفاده کردم نوع شون رو هم برابر با فارسی گذاشتم ولی متاسفانه حرف ذخیره نمیکنه دستوارت که نوشتم به این صورت لطفا کمکم کنید
اگر هیچ مقدار متنی (حتی به صورت ناخوانا) ذخیره نمی شود:
- بررسی کنید که نوع DataType ستون های غیر عددی به صورت VARCHAR, TEXT و... باشد نه INT.
- داده ها را با توابعی مانند mysqli_real_escape_string ایمن سازی کنید.
اگر حرف ذخیره می شوند اما به صورت ناخوانا:
- فایل های خود را از نظر وجود BOM با نرم افزار ++NotePad بررسی کنید.
- Collation جداول و دیتابیس را بر روی utf8_persian_ci تنظیم کنید.
پریسا
۰۹:۵۰ ۱۳۹۳/۱۱/۱۱
بله همینطور بود با گذاشتن بک کوت بدون اینکه نام ها رو عوض کنم مشکلم حل شد. واقعا متشکرم
پریسا
۰۰:۲۲ ۱۳۹۳/۱۱/۰۹
سلام
واقعا شرمنده هرچی سعی میکنم نمیفهمم منظورش چیه از این ارور
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 'option,
برخی عبارات در MySQL قابل استفاده نیستند که به آنها Reserved Words یا عبارات محفوظ می گویند:
dev.mysql.com/doc/refman/5.5/en/reserved-words.html
عبارت option به کار رفته در پرس و جوی شما جزء همین دسته است.
راه حل: این ستون را به نام دیگری تغییر دهید!
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
7 × 2
20 × 20
=