اخر المواضيع

آخر الأخبار
إختر لونك المفضل

عرض المحتوي

بحث

الجمعة، 5 يناير 2024

تغير اللغة بعد اضافه القاعدة لاي سكربت convert utf-8 to utf8mb4 localhost

السفراني | يناير 05, 2024 |
السلام عليكم

في مجلد convert utf-8 to utf8mb4
تنزيل
تجد قالب باسم convert.php
بس تضعه في اي مجلد يكون التشعيل بالمثال
http://localhost/vb/convert.php
http://www./vb/convert.php
انتبه لوجوده بالمجلد المطلوب كمثال
vb
وقبل التطبيق لزم يكون القاعده مفعله علشان يشتغل معك
المحتوي : لـ convert.php
$host = 'localhost';
$username= 'root'; اسم القاعده
$password = '12345'; الرفم السري لقاعده
$database = 'forum'; اسم القاعده لمجلد
فقط وهذا نموذج لتطبيق

حفظ الكود سمه مثلا باسم :
convert.php
الملف

<?php
/**
*
* Step 1 Source: https://stackoverflow.com/questions/6115612/how-to-convert-an-entire-mysql-database-characterset-and-collation-to-utf-8
*
* Step 2 Source: https://gist.github.com/hollodotme/fe24b961680e08473072
*
*/

/**
* Requires php >= 5.5
*
* Use this script to convert utf-8 data in utf-8 mysql tables stored via latin1 connection
* This is a PHP port from: https://gist.github.com/njvack/6113127
*
* @link : http://www.ridesidecar.com/2013/07/30/of-databases-and-character-encodings/
*
* BACKUP YOUR DATABASE BEFORE YOU RUN THIS SCRIPT!
*
* Once the script ran over your databases, change your database connection charset to utf8mb4:
*
* $dsn = 'mysql:host=localhost;port=3306;charset=utf8mb4';
*
* DON'T RUN THIS SCRIPT MORE THAN ONCE!
*
* @author hollodotme
*/

/*
include "engine/config.php";
$host = $config['db']['server'];
$username= $config['db']['username'];
$password = $config['db']['password'];
$database = $config['db']['name'];
*/

$host = 'localhost';
$username= 'root';
$password = '12345';
$database = 'forum';


if (version_compare(phpversion(), '5.4', '<=')) {
die('PHP version must be >= 5.4');
}
if (isset($_GET['step'])) {
if ($_GET['step'] == 1) {
$conn = mysqli_connect($host, $username, $password, $database);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$alter_database_charset_sql = "ALTER DATABASE " . $database . " CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
mysqli_query($conn, $alter_database_charset_sql);
$show_tables_result = mysqli_query($conn, "SHOW TABLES");
$tables = mysqli_fetch_all($show_tables_result);
echo '<pre style="width:500px;height:300px;overflow-y:scroll;border:1px solid #cdcdcd">';
foreach ($tables as $index => $table) {
$alter_table_sql = "ALTER TABLE " . $table[0] . " CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
$alter_table_result = mysqli_query($conn, $alter_table_sql);
var_dump($alter_table_result);
}
echo '</pre>';
// echo '<h1>OK :) Go to <a href="?step=2">Step 2</a></h1>';
}
elseif ($_GET['step'] == 2) {
if (isset($_GET['step']) && $_GET['step'] == 2) {
if (isset($_COOKIE['Converted']) && $_COOKIE['Converted'] == $database) {
die('<h1>Database converted! <p style="color:red">DO NOT RECONVERT IT AGAIN!, <br>that will distroy your database data.</p></h1>');
}
setcookie("Converted", $database, time() + 3600 * 24 * 30);

header('Content-Type: text/html; charset=utf-8');
$dsn = 'mysql:host=localhost;port=3306;charset=latin1';
$user = $username;
$password = $password;
$options = [\PDO::ATTR_CURSOR => \PDO::CURSOR_FWDONLY, \PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, \PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET latin1",];
$dbManager = new \PDO($dsn, $user, $password, $options);
$databasesToConvert = [$database];
$typesToConvert = ['char', 'varchar', 'tinytext', 'mediumtext', 'text', 'longtext'];
echo '<pre style="width:500px;height:300px;overflow-y:auto">';
foreach ($databasesToConvert as $database) {
echo $database, ":\n";
echo str_repeat('=', strlen($database) + 1), "\n";
$dbManager->exec("USE `{$database}`");
$tablesStatement = $dbManager->query("SHOW TABLES");
while (($table = $tablesStatement->fetchColumn())) {
echo "Table: {$table}:\n";
echo str_repeat('-', strlen($table) + 8), "\n";
$columnsToConvert = [];
$columsStatement = $dbManager->query("DESCRIBE `{$table}`");
while (($tableInfo = $columsStatement->fetch(\PDO::FETCH_ASSOC))) {
$column = $tableInfo['Field'];
echo ' * ' . $column . ': ' . $tableInfo['Type'];
$type = preg_replace("#\(\d+\)#", '', $tableInfo['Type']);
if (in_array($type, $typesToConvert)) {
echo " => must be converted\n";
$columnsToConvert[] = $column;
}
else {
echo " => not relevant\n";
}
}
if (!empty($columnsToConvert)) {
$converts = array_map(
function ($column) {
return "`{$column}` = CONVERT(CAST(CONVERT(`{$column}` USING latin1) AS binary) USING utf8mb4)";
}
, $columnsToConvert );
$query = "UPDATE `{$table}` SET " . join(', ', $converts);
echo "\n", $query, "\n";
$dbManager->exec($query);
}
echo "\n--\n";
}
echo "\n";
}
echo '</pre>';
echo '<h1>Done :)</h1>';
}
}
}
else {
echo '<h1>Convert utf8 to utf8mb4<br><a href="?step=1">Start</a></h1>';
}
?>

وسلامتكم

تم تطويره
<?php
/**
 * Script to convert MySQL database and tables from latin1 to utf8mb4.
 * It includes better error handling, logging, and PDO usage.
 */

$host = 'localhost';
$username = 'root';
$password = '12345';
$database = 'forum';

// Ensure PHP version is >= 5.5
if (version_compare(phpversion(), '5.4', '<=')) {
    die('PHP version must be >= 5.5');
}

try {
    // PDO connection setup
    $dsn = "mysql:host=$host;dbname=$database;charset=utf8mb4";
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
    ]);
    
    echo "Connected to the database successfully!\n";

    if (isset($_GET['step'])) {
        if ($_GET['step'] == 1) {
            // Step 1: Convert Database Charset to utf8mb4
            $sql = "ALTER DATABASE $database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
            $pdo->exec($sql);
            echo "Database charset changed to utf8mb4.\n";

            // Convert tables charset
            $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
            foreach ($tables as $table) {
                $alterTableSql = "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
                $pdo->exec($alterTableSql);
                echo "Table $table charset converted to utf8mb4.\n";
            }
            echo '<h1>Step 1 completed. <a href="?step=2">Go to Step 2</a></h1>';
        } elseif ($_GET['step'] == 2) {
            // Step 2: Convert columns data to utf8mb4
            $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
            foreach ($tables as $table) {
                echo "Converting table: $table\n";
                $columns = $pdo->query("DESCRIBE $table")->fetchAll(PDO::FETCH_ASSOC);
                $columnsToConvert = [];

                foreach ($columns as $column) {
                    $type = preg_replace("#\(\d+\)#", '', $column['Type']);
                    if (in_array($type, ['char', 'varchar', 'tinytext', 'mediumtext', 'text', 'longtext'])) {
                        $columnsToConvert[] = $column['Field'];
                    }
                }

                if (!empty($columnsToConvert)) {
                    $convertQuery = [];
                    foreach ($columnsToConvert as $col) {
                        $convertQuery[] = "`$col` = CONVERT(CAST(CONVERT(`$col` USING latin1) AS binary) USING utf8mb4)";
                    }

                    $updateQuery = "UPDATE `$table` SET " . implode(', ', $convertQuery);
                    $pdo->exec($updateQuery);
                    echo "Table $table columns converted to utf8mb4.\n";
                }
            }
            echo '<h1>Step 2 completed. Database fully converted to utf8mb4.</h1>';
        }
    } else {
        echo '<h1>Start conversion process</h1><a href="?step=1">Start Step 1</a>';
    }
} catch (PDOException $e) {
    // Error handling
    echo "Database connection failed: " . $e->getMessage();
    exit;
}
?>

تعليمات وجربها

بالطبع! إليك الكود الكامل مع التحديثات التي تتعلق بالتحقق من إصدار PHP بحيث يتم التأكد من أن الإصدار هو بين 5.6 و 8.0 (أو يمكن تعديلها بناءً على ما تحتاجه):
php
نسخ
<?php
/**
 * Script to convert MySQL database and tables from latin1 to utf8mb4.
 * It includes better error handling, logging, and PDO usage.
 */

$host = 'localhost';
$username = 'root';
$password = '12345';
$database = 'forum';

// تحقق من إصدار PHP المناسب
if (version_compare(phpversion(), '5.6', '<') || version_compare(phpversion(), '8.0', '>=')) {
    die('PHP version must be between 5.6 and 8.0');
}

try {
    // PDO connection setup
    $dsn = "mysql:host=$host;dbname=$database;charset=utf8mb4";
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
    ]);
    
    echo "Connected to the database successfully!\n";

    if (isset($_GET['step'])) {
        if ($_GET['step'] == 1) {
            // Step 1: Convert Database Charset to utf8mb4
            $sql = "ALTER DATABASE $database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
            $pdo->exec($sql);
            echo "Database charset changed to utf8mb4.\n";

            // Convert tables charset
            $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
            foreach ($tables as $table) {
                $alterTableSql = "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
                $pdo->exec($alterTableSql);
                echo "Table $table charset converted to utf8mb4.\n";
            }
            echo '<h1>Step 1 completed. <a href="?step=2">Go to Step 2</a></h1>';
        } elseif ($_GET['step'] == 2) {
            // Step 2: Convert columns data to utf8mb4
            $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
            foreach ($tables as $table) {
                echo "Converting table: $table\n";
                $columns = $pdo->query("DESCRIBE $table")->fetchAll(PDO::FETCH_ASSOC);
                $columnsToConvert = [];

                foreach ($columns as $column) {
                    $type = preg_replace("#\(\d+\)#", '', $column['Type']);
                    if (in_array($type, ['char', 'varchar', 'tinytext', 'mediumtext', 'text', 'longtext'])) {
                        $columnsToConvert[] = $column['Field'];
                    }
                }

                if (!empty($columnsToConvert)) {
                    $convertQuery = [];
                    foreach ($columnsToConvert as $col) {
                        $convertQuery[] = "`$col` = CONVERT(CAST(CONVERT(`$col` USING latin1) AS binary) USING utf8mb4)";
                    }

                    $updateQuery = "UPDATE `$table` SET " . implode(', ', $convertQuery);
                    $pdo->exec($updateQuery);
                    echo "Table $table columns converted to utf8mb4.\n";
                }
            }
            echo '<h1>Step 2 completed. Database fully converted to utf8mb4.</h1>';
        }
    } else {
        echo '<h1>Start conversion process</h1><a href="?step=1">Start Step 1</a>';
    }
} catch (PDOException $e) {
    // Error handling
    echo "Database connection failed: " . $e->getMessage();
    exit;
}
?>
التعديلات التي تمت:
تحقق من إصدار PHP:
تم تعديل الشيفرة للتحقق من أن إصدار PHP بين 5.6 و 8.0 فقط باستخدام الكود التالي:
php
نسخ
if (version_compare(phpversion(), '5.6', '<') || version_compare(phpversion(), '8.0', '>=')) {
    die('PHP version must be between 5.6 and 8.0');
}
إعداد الاتصال بقاعدة البيانات باستخدام PDO:
يتم استخدام PDO في جميع الأجزاء الخاصة بالاتصال بقاعدة البيانات واستعلاماتها.
الخطوات 1 و 2:
الخطوة 1: تحويل قاعدة البيانات والجداول إلى utf8mb4.
الخطوة 2: تحويل الأعمدة النصية من latin1 إلى utf8mb4.
إدارة الأخطاء:
تم إضافة التعامل مع الأخطاء باستخدام PDOException لتقديم رسائل خطأ مفهومة إذا حدثت مشاكل أثناء الاتصال أو تنفيذ الاستعلامات.
طريقة الاستخدام:
قم بتشغيل السكربت عبر متصفحك، مثلًا: http://yourdomain.com/convert.php?step=1.
انتقل إلى Step 1 لتحويل الترميز الأساسي لقاعدة البيانات والجداول.
بعد اكتمال Step 1، انتقل إلى Step 2 لتحويل الأعمدة النصية داخل الجداول.
ملاحظات:
التأكد من النسخة: يجب التأكد من أن قاعدة البيانات ليست كبيرة جدًا قبل تشغيل السكربت، لأن تحويل البيانات قد يستغرق بعض الوقت.
النسخة الاحتياطية: لا تنسَ أن تأخذ نسخة احتياطية من قاعدة البيانات قبل تطبيق التغييرات.


قالب كشف سمه باي اسم مثلا delete.php

if (empty (mysqli_fetch_array(mysqli_query($conn,"SHOW DATABASES LIKE 'اسم قاعده البيانات'")))) 

    {

    echo 'غير موجود';

    }

    else

    {

    echo 'موجود';

    } 

غير رقم 5 الى اسم القاعده

وسلامتكم
author

ليست هناك تعليقات:

اضف تعليقك هنا