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

السؤال

نشر

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

اواجه مشكلا في تغيير اسم العمود بالامر 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

  • 3
نشر
بتاريخ 5 دقائق مضت قال Seyid Ahmed Khessam:

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

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

حاول عمل هذه:

alter table table_name
change column original_name new_name

 

  • 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
نشر (معدل)

الملف يحفظ تلقائيا وعند تغيير الاستعلام يشتغل ولكن عند الرجوع الى 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
  • 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

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...