moshaver71
شنبه 24 تیر 1391, 12:57 عصر
سلام
خسته نباشيد
من چند وقت پيش يه برنامه اي نوشتم كه متاسفانه اطلاعات وارد شده داخل اون با يونيكد درست وارد نشدن و توي phpmyadmin اطلاعات بهم ريخته هستن. (البته موقع نمايش توي سايت مشكلي ندارن)
الآن براي حل اين مشكل ميخوام يكبار اطلاعات رو طبق روال قبلي فراخواني بكنم و اينبار بعد از mysql_select_db كد
mysql_query("SET NAMES utf8");
رو قرار بدم و اطلاعات فراخواني شده رو مجددا بازنويسي كنم.
الآن نزديك 2 روز هست كه من دارم با اين ديتابيس ور ميرم ولي نتونستم مشكل رو برطرف كنم ممنون ميشم اگه منو راهنمايي كنيد.
moshaver71
شنبه 24 تیر 1391, 18:34 عصر
دوستان بالاخره بعد از 2 روز اعصاب خوذدي تونستنم مشكل رو برطرف كنم.
روش حل مشكل رو ميگم تا اگه كسي هم مشكلي مثل مشكل من داشت بتونه استفاده كنه.
اول با استفاده از اين كد از ديتابيس يه بك آپ گرفتم( دقت كنيد كه توي اين دستور از mysql_query("SET NAMES utf8"); استفاده نشده كه اين باعث ميشه خروجي بدست اومده بصورت نوشته هاي فارسي باشه)
<?php
function backup_db($host, $user, $pass, $name, $tables = '*') {
date_default_timezone_set('Asia/Tehran');
$return = '';
mysql_connect($host,$user,$pass) or die('Connection error');
mysql_select_db($name) or die('Database error');
;
if($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
mysql_free_result($result);
}
else {
$tables = is_array($tables) ? $tables : explode(',', $tables);
}
foreach($tables as $table) {
$result = mysql_query('SELECT * FROM `'.$table.'`');
$num_fields = mysql_num_fields($result);
$return .= 'DROP TABLE IF EXISTS `'.$table.'`;'.PHP_EOL.PHP_EOL;
$row = mysql_fetch_row(mysql_query('SHOW CREATE TABLE `'.$table.'`'));
$return .= $row[1].';'.PHP_EOL.PHP_EOL;
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysql_fetch_row($result)) {
$return.= 'INSERT INTO `'.$table.'` VALUES(';
for($j = 0; $j < $num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace('\n', '\\n', $row[$j]);
if (isset($row[$j])) {
$return .= '\''.$row[$j].'\'';
}
else {
$return .= '\'\'';
}
if ($j < ($num_fields - 1)) {
$return .= ',';
}
}
$return .= ');'.PHP_EOL;
}
}
$return .= PHP_EOL.PHP_EOL.PHP_EOL;
}
$handle = fopen('db-backup-'.$name.'-'.date('Y,m,d-H,i,s').'.sql', 'w');
fwrite($handle, $return);
fclose($handle);
}
backup_db('localhost', 'root', '', 'sabacms');
?>
بعد از اينكه فايل بك آپ ايجاد شد با استفاده از اين كد بك آپ رو بازيابي كردم (دقت داشته باشيد كه اينبار از كد mysql_query("SET NAMES utf8"); استفاده شده كه باعث ميشه اطلاعات ما به همين شكلي كه هستن توي phpmyadmin هم قرار بگيرن)
<?php
// Name of the file
$filename = 'db-backup-sabacms-2012,07,14-17,03,46.sql';
// MySQL host
$mysql_host = 'localhost';
// MySQL username
$mysql_username = 'root';
// MySQL password
$mysql_password = '';
// Database name
$mysql_database = 'sabacms';
//////////////////////////////////////////////////////////////////////////////////////////////
// Connect to MySQL server
mysql_connect($mysql_host, $mysql_username, $mysql_password) or die('Error connecting to MySQL server: ' . mysql_error());
// Select database
mysql_select_db($mysql_database) or die('Error selecting MySQL database: ' . mysql_error());
mysql_query("SET NAMES utf8");
// Temporary variable, used to store current query
$templine = '';
// Read in entire file
$lines = file($filename);
// Loop through each line
foreach ($lines as $line)
{
// Skip it if it's a comment
if (substr($line, 0, 2) == '--' || $line == '')
continue;
// Add this line to the current segment
$templine .= $line;
// If it has a semicolon at the end, it's the end of the query
if (substr(trim($line), -1, 1) == ';')
{
// Perform the query
mysql_query($templine) or print('Error performing query \'<strong>' . $templine . '\': ' . mysql_error() . '<br /><br />');
// Reset temp variable to empty
$templine = '';
}
}
?>
الآن اگه ديتابيس رو چك كنيد ميبينيد كه تمام اطلاعات به شكل صحيح و خونا توي ديتابيس درج شدن.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.