PDA

View Full Version : سوال: خواندن مقادیز enum در mysql



click2ir
سه شنبه 13 مرداد 1388, 23:32 عصر
سلام دوستان من در داخل دیتا بیس یک فیلد تعریف کردم از جنس enum
و به اون دو مقدار دادم مثلا ابتدایی و راهنمایی
حال می خوام از طریق php به این مقادیر دسترسی داشته باشم یعنی بتونم این مقادیر رو بدست بیارم

mrrajabi
چهارشنبه 14 مرداد 1388, 09:57 صبح
خب تو کجاش مشکل داری؟
یه عبارت sql بنویس و بخون. این کاری نداره که تو خود help نرم افزار Nusphere هست.

click2ir
چهارشنبه 14 مرداد 1388, 14:02 عصر
دوست عزیز حرف شما درست ولی من مقادیری که به دیتا بیس ارسال شده رو نمیخوام مثلا ما برای یک فیلد که جنس آن enum است مقادیر خوب و بد را در نظر می گیریم که در یک فرم یکی از آنها ارسال می شود و می توان با یک sql آن را خواند ولی من می خواهم مقادیری که برای enum در نظر گرفته شده که همان خوب و بد هستند را بتوانم بخوانم

شاید من نتونسته باشم درست برسونم
به این عکس ها یه نگاه بندازید دقیقا من مقادیری رو که د هنگام ساخت دیتابیس برای enum در نظر گرفتیم رو می خوام نه مقادیری که بعد از پر کردن فرم توسط کاربر ارسال شده است
در این تصویر هم با رنگ سبز نشان داده شده .
http://click2ir.parsaspace.com/a1%20copy.jpg

click2ir
چهارشنبه 14 مرداد 1388, 15:02 عصر
با تشکر از دوستان مشکلم حل شد و این تابع رو پیدا کردم من طرز کار بااین رو بلدم ولی نمی دونم کدش چه جوری ساخته شده اگر کسی لطف کنه و کد رو توضیح بده بد نیست؟
ممنون از شما دوستان



<?php

function getEnumVals($host,$user,$password,$db,$table,$fiel d,$sorted=true)
{
$types='';
$rp=mysql_connect($host,$user,$password);
$dbConnect=mysql_select_db($db);
$result=mysql_query('show columns from '.$table.';');
while($tuple=mysql_fetch_assoc($result))//این کد while و داخل while رو توضیح بدید
{
if($tuple['Field'] == $field)
{
$types=$tuple['Type'];
$beginStr=strpos($types,"(")+1;
$endStr=strpos($types,")");
$types=substr($types,$beginStr,$endStr-$beginStr);
$types=str_replace("'","",$types);
$types=split(',',$types);
if($sorted)
sort($types);
break;
}
}
mysql_close($rp);
return($types);
}
?>

click2ir
چهارشنبه 14 مرداد 1388, 23:24 عصر
ورودی ها تا حلقه که معلومه حالا می رسیم به حلقه while
با استفاده از دستور اس کیو الی که نوشتیم و اون رو به تابع mysql_fetch_assoc دادیم برای ما یک آرایه انجمی از اطلاعات می دهد
در این جا نام ستونها را برای ما بیرون می کشد و در متغییر tuple ذخیره می کند

تا زمانی که مقداری که دورن این متغییر است با نام فیلدی که ما می خواهیم اطلاعات

آن را داشته باشیم یکی شود و یا تا زمانی که اخرین ستون را بررسی کند این حلقه ادامه
دارد زمانی که نام ها برابر شدند وارد شرط می شود
و چون ما دنبال نوع enum می گشتیم یک ساختار ثابت دارد که به صورت زیر است

enum('ali','reza','mohammad')
خوب برای اینکه به این مقادیر دست یابیم باید اینها را از جمله بالا جدا کنیم که برای این کار از توابع string استفاده می کنیم

strpos($types,"(")
با استفاده از این تابع پرانتز اول را پیدا می کنیم که مقادیر بعد از آن قرار دارند
و با استفاده از همان تابع پرانتز دوم را پیدا می کنیم

strpos($types,")");
خوب حال ما مکان متغییرها را می دانید یکی بعد از اولین پرانتز تا رسیدن به پرانتز دوم

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

substr($types,$beginStr,$endStr-$beginStr);
که اولین ارگومنت رشته مورد نظر و ارگومنت دوم و سوم به ترتیب ابتدای رشته و انتهای رشته هستند
خوب ما با این کار رشته بین دو پرانتز را برداشتیم و ذخیره کردیم این تا اینجا

خوب حالا ما در رشته خودمون چی داریم دو علامت اضافی یکی ' و یکی هم ,
ما از یکی استفاده می کنیم و یکی دیگر رو با رشته تهی جایگزاری می کنیم
برای حدف از تابع زیر استفاده می کنیم که آرگومنت اول را با آرگومنت دوم در ارگومنت سوم جایگزاری می کند

$types=str_replace("'","",$types);

این تابع باعث از بین رفتن علامت ' می شود
خوب ماند یه علامت دیگه ,
از این علامت هم برای جدا سازی کلمات استفاده خواهیم کرد
تابع زیر نیز با استفاده از علامت مشخص شده توسط ما یک رشته را به چند زیر رشته تبدیل می کندو یک آرایه را بر می گرداند

split(',',$types);
خوب ما اینجا با استفاده از علامت ' رشته ای که در متغییر type بودرا به سه قسمت تقسیم کردیم پس در داخل این آرایه
سه مقدار ali reza mohammad را بر می گرداند.
که هدف ما هم بدست آوردن همین مقادیر بود