محتوای آموزشی وبلاگ نتآرام
هنگام اجرای دستور یا واردکردن فایل دیتابیس، پیام ERROR 1064: You have an error in your SQL syntax دیده میشود. یعنی سرور نتوانسته بخشی از دستور SQL را با قواعد نسخه خودش بخواند. مثل جملهای که یک علامت یا کلمهاش جابهجا شده باشد، مشکل ممکن است کمی قبل از نقطهای باشد که خطا نشان میدهد.
این خطا با «جدول وجود ندارد» یا «شناسه تکراری» یکی نیست. پیش از ویرایش فایل و تکرار ورود، نسخه اصلی و دادههای مقصد را حفظ کنید؛ یک فایل SQL ممکن است پیش از خطا بخشی از تغییرات را انجام داده باشد.
قدم اول: متن کامل خطا و محل آن را ببینید
پیام معمولاً بخش
کد / دستورnear و شماره خطی شبیه نمونه زیر دارد:ERROR 1064 (42000): ... near '...' at line 3
بخش
near محدودهای است که موتور در آنجا نتوانسته ادامه دستور را درست بخواند، اما اشتباه ممکن است یک ویرگول یا نقلقول پیش از آن باشد. شماره خط در ابزارهای مختلف ممکن است نسبت به همان دستور یا فایل گزارش شود. چند خط قبل و بعد را ببینید و نام جدول و داده حساس را در گزارش عمومی منتشر نکنید.اگر خطا از برنامه وب میآید، زمان و عملیات را ثبت و گزارش خصوصی برنامه را بررسی کنید. اگر از phpMyAdmin هنگام Import دیده میشود، نام فایل، نسخه مبدأ و مقصد و اولین خطای کامل را یادداشت کنید. مرجع MySQL کد ۱۰۶۴ را خطای تجزیه دستور معرفی میکند.
قدم دوم: آیا مقصد هنوز تغییر کرده است؟
ورود یک فایل میتواند چندین دستور داشته باشد. شکست دستور شماره دهم به این معنی نیست که نه دستور قبلی هیچ اثری نداشتهاند. اثر دقیق به نوع دستورات، موتور و تراکنش بستگی دارد. فایل را فوراً دوباره روی دیتابیس واقعی اجرا نکنید؛ ممکن است جدول تکراری یا داده ناسازگار ایجاد شود.
یک نسخه امن از وضعیت فعلی مقصد نگه دارید و فایل اصلی را دستنخورده حفظ کنید. اگر سایت سفارش میگیرد، بازگردانی کل دیتابیس قدیمی ممکن است سفارشهای جدید را حذف کند. برای بررسی، یک پایگاه داده آزمایشی جدا با سطح دسترسی محدود بسازید و فایل را آنجا آزمایش کنید.
چند اشتباه رایج را با مثال بفهمیم
ویرگول یا پرانتز: در یک
CREATE TABLE، جاافتادن ویرگول میان تعریف دو ستون میتواند باعث شود خطا نزدیک نام ستون بعدی ظاهر شود. تعریف ستون قبل و بعد از near را با ساختار صحیح همان نسخه مقایسه کنید.نقلقول متن: یک علامت
' بستهنشده میتواند بقیه دستور را تغییر دهد. داده کاربر را با چسباندن مستقیم به رشته SQL وارد دستور نکنید؛ برنامه باید از پرسوجوی پارامتری متناسب با درایور استفاده کند. فایل واقعی را با جایگزینی کلی و کورکورانه همه علامتها اصلاح نکنید.کلمه رزروشده بهعنوان نام: بعضی نامها در SQL معنی ویژه دارند. مثال فرضی زیر برای جدولی با نام
کد / دستورorder از نقلقول شناسه MySQL استفاده میکند:SELECT id FROM `order`;
این مثال فقط زمانی اجرا میشود که جدول و ستون آزمایشی واقعاً وجود داشته باشند. علامت دور نام جدول backtick است، نه نقلقول متن. بهتر است در طراحی جدید نام واضحی انتخاب شود که با کلمه رزروشده تداخل نداشته باشد. فهرست کلمات رزروشده MySQL بر اساس نسخه فرق میکند؛ نسخه واقعی را انتخاب کنید.
نیمفاصله یا نویسه کپیشده: گاهی کپی از ویرایشگر، علامت نقلقول هوشمند یا نویسه نامرئی وارد دستور میکند. یک نسخه کپی از دستور را در ویرایشگر متن مناسب بررسی کنید و فقط علامتهای مربوط را با قالب صحیح جایگزین کنید. داده فارسی را بهصورت گسترده حذف یا تبدیل نکنید.
قدم سوم: نسخه مبدأ و مقصد را مقایسه کنید
در phpMyAdmin یا نشست SQL مجاز، دستور فقطخواندنی زیر نسخه سرور فعلی را نشان میدهد:
کد / دستورSELECT VERSION();
خروجی را با نسخهای که فایل از آن تهیه شده مقایسه کنید. MySQL و MariaDB و نسخههای مختلف همیشه همه قابلیتها و کلمات را یکسان پشتیبانی نمیکنند. اگر فایل برای نسخه جدیدتری ساخته شده، دنبال گزینه خروجی یا مسیر مهاجرت مستند نرمافزار بگردید. تغییر تصادفی نسخه سرور یا جایگزینی عمومی نام قابلیتها میتواند داده را خراب کند.
اگر فایل حاصل خروجی استاندارد ابزار پشتیبان است، دوباره از مبدأ سالم و با روش سازگار خروجی بگیرید. اگر فایل توسط یک افزونه یا اسکریپت ساخته شده، نسخه آن ابزار و دستور خطادار را در محیط آزمایشی بررسی کنید. خطای
Unknown collation یا Duplicate entry کد و علت دیگری دارد و نباید با ویرایش نحوی تصادفی رفع شود.بعد از اصلاح، چطور بررسی کنیم؟
فقط نسخه کپیشده را اصلاح و در پایگاه آزمایشی خالی و مناسب اجرا کنید. گزارش پایان، تعداد جدولها و چند داده نمونه غیرمحرمانه را با مبدأ مقایسه کنید. اگر فایل شامل تغییرات ساختار است، وابستگی جدولها و نسخه برنامه را هم بررسی کنید. موفقیت Import بهتنهایی تأیید نمیکند سایت با همه دادهها درست کار میکند.
برای انتقال به محیط واقعی، زمان مناسب، پشتیبان قابل بازیابی و برنامه حفظ تغییرات جدید را با مدیر تعیین کنید. سپس خود صفحه یا عملی را که خطا میداد آزمایش کنید. در هاست وردپرس نتآرام، متن خطا، نسخههای مبدأ و مقصد و شماره خط را بدون رمز و داده مشتری به پشتیبانی بدهید.
مقاله قبلی
مقاله قبلی وجود ندارد.
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
