اذهب إلى المحتوى

السؤال

نشر

السلام عليكم ورحمة الله تعالى وبركاته ..♥

اواجه مشكلا في تغيير اسم العمود بالامر RENAME رغم انني جربت عدة استعلامات في نفس الكود . كلها تعمل بشكل عادي حتى تغيير اسم الجدول يتغير لكن عند تمرير استعلام تغيير اسم العمود يقوم بارجاع خطا .

الكود لدي كالتالي  :

<?php
final class DBselectClass{
    private $serName = 'localhost';
    private $dabName = 'forlearn';
    private $admName = 'root';
    private $admPass = '';
    public function DBselectFun($table1){
        $con = new PDO("mysql:host=$this->serName;dbname=$this->dabName", $this->admName, $this->admPass);
        $con ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $con->prepare("ALTER TABLE $table1 RENAME post TO name");
        if($stmt ->execute()){
            return 1;
        }
    }
}
$obConnect = new DBselectClass();
echo $obConnect->DBselectFun('user');
?>

وهدا هو الخطا الدي يضهر عند الاستعلام :

Fatal error: Uncaught PDOException: SQLSTATE[42000]: 
Syntax error or access violation: 1064 You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TO name'
at line 1 in C:\xampp\htdocs\forlearn\index.php:11 Stack trace: #0 C:\xampp\htdocs\forlearn\index.php(11):
PDOStatement->execute() #1 C:\xampp\htdocs\forlearn\index.php(17): DBselectClass->DBselectFun('user') 
#2 {main} thrown in C:\xampp\htdocs\forlearn\index.php on line 11

وشكرا لكل من اعانني والصلاة والسلام على حبيبنا ونبينا وقائدنا محمد صلواة ربي عليه

Recommended Posts

  • 1
نشر

و عليكم السلام و رحمة الله . 

يحتمل أن يكون ذلك بسبب نسخة الـ MySql التي تستخدمها . فالسياق قد يكون غير مدعوم بعد في نسخ متأخرة من MySql أقل من النسخة الثامنة (الحالية) . 

يمكنك على كل حال إستبدال الإستعلام الذي لديك بالتالي : 

ALTER TABLE tableName CHANGE oldcolname newcolname datatype(length);

أو مفصلا : 

ALTER TABLE `dbName`.`tableName` 

CHANGE COLUMN `old_columnName` `new_columnName` VARCHAR(45) NULL DEFAULT NULL;

 

  • 0
نشر

ربما تكمن المشكلة أنك لم تذكر أنك تريد تعديل عمود column :

ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name

..
RENAME COLUMN old_col_name TO new_col_name

لأن عدم تحديد عمود يقود إلى تعديل مفتاح أو دليل

RENAME {INDEX|KEY} old_index_name TO new_index_name

اكتب:

ALTER TABLE t1      RENAME COLUMN c_old TO c_new;

ALTER TABLE $table1 RENAME COLUMN post  TO  name;
                          ^^^^^^^^

أي المشكلة بالتحديد هي ذكر COLUMN

  • 0
نشر
بتاريخ 33 دقائق مضت قال Wael Aljamal:

ربما تكمن المشكلة أنك لم تذكر أنك تريد تعديل عمود column :


ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name

..
RENAME COLUMN old_col_name TO new_col_name

لأن عدم تحديد عمود يقود إلى تعديل مفتاح أو دليل

RENAME {INDEX|KEY} old_index_name TO new_index_name

اكتب:


ALTER TABLE t1      RENAME COLUMN c_old TO c_new;

ALTER TABLE $table1 RENAME COLUMN post  TO  name;
                          ^^^^^^^^

أي المشكلة بالتحديد هي ذكر COLUMN

قمت بدلك لكن دون جدوى

 

بتاريخ منذ ساعة مضت قال Adnane Kadri:

و عليكم السلام و رحمة الله . 

يحتمل أن يكون ذلك بسبب نسخة الـ MySql التي تستخدمها . فالسياق قد يكون غير مدعوم بعد في نسخ متأخرة من MySql أقل من النسخة الثامنة (الحالية) . 

يمكنك على كل حال إستبدال الإستعلام الذي لديك بالتالي : 


ALTER TABLE tableName CHANGE oldcolname newcolname datatype(length);

أو مفصلا : 


ALTER TABLE `dbName`.`tableName` 

CHANGE COLUMN `old_columnName` `new_columnName` VARCHAR(45) NULL DEFAULT NULL;

 

xampp عندي اخر نسخة حملتها من يومين لدلك لا اظن ان الامر يتعلق بكونه نسخة قديمة

  • 0
نشر
بتاريخ الآن قال Seyid Ahmed Khessam:

قمت بدلك لكن دون جدوى

تأكد من حفظ الملف ثم إعادة التجريب، وأرجو مشاركة رسالة الخطأ إن ظهرت..

وحاول إرفاق أي معلومات عن إصدار قاعدة البيانات لديك.

 

  • 0
نشر (معدل)

الملف يحفظ تلقائيا وعند تغيير الاستعلام يشتغل ولكن عند الرجوع الى RENAME COLUMN لايشتغل

معلومات حول الخادم :_________________________________________________

خادم قاعدة بيانات

الخادم: 127.0.0.1 via TCP/IP

نوع الخادم: MariaDB

Server connection: SSL is not being used 

إصدار الخادم: 10.4.21-MariaDB - mariadb.org binary distribution

نسخة البروتوكول: 10

المستخدم: root@localhost

مجموعة أحرف الخادم: UTF-8 Unicode (utf8mb4)

خادم الويب

Apache/2.4.49 (Win64) OpenSSL/1.1.1l PHP/8.0.11

إصدار عميل قاعدة البيانات: libmysql - mysqlnd 8.0.11

امتداد PHP: mysqli  curl  mbstring 

PHP إصدار : 8.0.11

_____________________________________________________________

الخطا الدي ظهر بعد اضافة  COLUMN للاستعلام 

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'COLUMN post TO name varchar(50)' at line 1 in C:\xampp\htdocs\forlearn\index.php:11 Stack trace: #0 C:\xampp\htdocs\forlearn\index.php(11): PDOStatement->execute() #1 C:\xampp\htdocs\forlearn\index.php(17): DBselectClass->DBselectFun('user') #2 {main} thrown in C:\xampp\htdocs\forlearn\index.php on line 11

تم التعديل في بواسطة Seyid Ahmed Khessam
  • 3
نشر
بتاريخ 5 دقائق مضت قال Seyid Ahmed Khessam:

الخطا الدي ظهر بعد اضافة column 

هل يمكنك تصفح قاعدة البيانات والتأكد من اسم الجدول؟ لربما قد تغير بدون أن تنتبه 

حاول عمل هذه:

alter table table_name
change column original_name new_name

 

  • 0
نشر

للاسف نفس المشكل

<?
$stmt = $con->prepare("ALTER TABLE $table1
        CHANGE COLUMN post TO name varchar(50)");

 

بتاريخ 14 دقائق مضت قال Wael Aljamal:

هل يمكنك تصفح قاعدة البيانات والتأكد من اسم الجدول؟ لربما قد تغير بدون أن تنتبه 

حاول عمل هذه:


alter table table_name
change column original_name new_name

 

المعلومات صحيحة وهدا الاستعلام نجح معي شكرا على المساعدة لكن لمدا الامر الاول لم يشتغل رغم ان النسخة جديدة من القاعدة والامر صحيح

  • 0
نشر
بتاريخ منذ ساعة مضت قال Seyid Ahmed Khessam:

لكن لمدا الامر الاول لم يشتغل رغم ان النسخة جديدة من القاعدة والامر صحيح

أنا بحثت عن  MariaDB 10  - rename column

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...