PDA

View Full Version : مشکل با ماریا دی بی



Weblove
چهارشنبه 20 مرداد 1395, 03:53 صبح
سلام دوستان یه مشکل بزرگ برام پیش اومده
سرور عوض کردم و روی سرور جدید دیتابیس مای اس کیو ال ورژن ماریا دی بی نصبه!
و هیچ insert query در سیستمم صورت نمیگیره و خطاشو بررسی کردم میگه : چون برخی فیلد هات نال نیستند و نمیشه خالیشون گذاشت،
این مشکل رو هیچ زمان خود مای اس کیو ال ایراد نمیگرفت. اما mariadb داره اذیت میکنه
کسی تاحالا به این مشکل برخورده ؟ راه حل چیه که مثل سابق کار کنه ؟
و اگر در نهایت مجبورم کل Default های دیتابیسم رو نال و 0 کنم آیا یک کوئری جامع وجود داره تا کلشو با یک کوئری ساماندهی کنم ؟

p19lord
چهارشنبه 20 مرداد 1395, 09:46 صبح
من هم با ماریادی بی موقع اینسرت کردن به مشکل برخوردم همه جوره هم میرم ولی باز فایده نداره این منه:

if (isset($_POST['buy'])) {
$id = $_POST['id']; $name = (string) "abc"; $price = (int) $_POST['price'];
echo $id . "<br/>" . $name . "<br/>" . $price ."<br/>";
date_default_timezone_set("Asia/Tehran");
$purDate = (string) date("Y-m-d h:i:s");
mysqli_set_charset($con, 'utf8');
$unsafe_insquery = "INSERT INTO purchases (file_id, file_name, price, purDate) VALUES ($id, '$name',$price, $purDate)"; $insquery = mysqli_prepare($con, mysqli_real_escape_string($con, $unsafe_insquery));
if ($insquery) {
$insResult = mysqli_query($con, $insquery) or die(mysqli_error($con) . "<br/>" .mysqli_errno($con));
if ($insResult) {
$purchased = mysqli_fetch_assoc($insResult);
} else {
echo 'nothing to show'; }
} else {
echo 'query doesn\'t work' . '<br/>'; echo mysqli_error($con) . "<br/>" . mysqli_errno($con); }
اون if و else آخر رو واسه debug گذاشتم syntax error می ده در حالی که همین query قبلا کار می کرد هر مدلی که تو SQL امکان پذیر هست رو امتحان کردم ولی نشده که نشده

Unique
چهارشنبه 20 مرداد 1395, 11:00 صبح
روی سرور جدید دیتابیس مای اس کیو ال ورژن ماریا دی بی نصبه!
تقریبا همه سرویس های هاستینگ خوب دارن میرن روی MariaDB و اصلا جای تعجب نداره چون MariaDB از MySQL خیلی خیلی بهتره.


چون برخی فیلد هات نال نیستند و نمیشه خالیشون گذاشت،
میشه اصل query و خطا را بگذارین !؟ با چی خروجی میگیرین ؟!

golbafan
چهارشنبه 20 مرداد 1395, 11:26 صبح
سلام
ماریا دیبی هم یکی از انجینهای مای اسکیوال هست
درست مثل ایننو دیبی و مای ایسام
که قابلیتهای خاص خودش رو داره

golbafan
چهارشنبه 20 مرداد 1395, 11:30 صبح
سلام دوستان یه مشکل بزرگ برام پیش اومده
سرور عوض کردم و روی سرور جدید دیتابیس مای اس کیو ال ورژن ماریا دی بی نصبه!
و هیچ insert query در سیستمم صورت نمیگیره و خطاشو بررسی کردم میگه : چون برخی فیلد هات نال نیستند و نمیشه خالیشون گذاشت،
این مشکل رو هیچ زمان خود مای اس کیو ال ایراد نمیگرفت. اما mariadb داره اذیت میکنه
کسی تاحالا به این مشکل برخورده ؟ راه حل چیه که مثل سابق کار کنه ؟
و اگر در نهایت مجبورم کل Default های دیتابیسم رو نال و 0 کنم آیا یک کوئری جامع وجود داره تا کلشو با یک کوئری ساماندهی کنم ؟

برای حل مشکل باید از empty string استفاده کنید
یا در تنظیمات جدول طول رکورد دینامیک انتخاب کنید

مهرداد سیف زاده
چهارشنبه 20 مرداد 1395, 11:53 صبح
سلام
ماریا دیبی هم یکی از انجینهای مای اسکیوال هست
درست مثل ایننو دیبی و مای ایسام
که قابلیتهای خاص خودش رو داره
خیر اشتباه هست
نرم افزار رو با انجین اشتباه نگیرید
mariaDB یه برنچ از mysql هست. وقتی اوراکل پروژه mysql رو به دست گرفت، مایکل ویدینوس یه پروژه دیگرو استارت زد که بر پایه هسته mysql بود. همون موقع گروه suse ازش حمایت کردن و بعدش هم از پکیجهای پیش‌فرض دیتابیس بجای mysql در fedora قرار گرفت
نوع درایورش دقیقا شبیه mysql هست
طراحی دیتابیس بهتره دقیق باشه. الان اگر به طراحی دیتابیس نگاه کنیم، شما گفتید فیلدی null نباشد و مقدار default هم بهش ندادید. ولی توی php دارید بصورت null رها میکنید
این طراحی دیتابیس، یا کدنویسی php نقص داره. یا در php بهش مقدار بدید یا دیتابیس رو تغییر بدید. که تغییر دیتابیس وقتی دیتای شما کم هست و حیاتی نیست امکان پذیر هست
ولی اگر نمیتونید دیتابیس رو تغییر بدید از IGNORE استفاده کنید. مشکل رو برطرف میکنه ولی در جاهایی که قراره null چک بشه یا duplicate نداشته باشه، کاربرد نداره چون از روی ارور میگذره و دیتا رو insert میکنه. جدول زیر از ماریا رو مطالعه کنید
https://mariadb.com/kb/en/mariadb/ignore/