PHP MYSQL Prefix Değiştirici

logo-mysql logo-mysql   {right}Worpress, Drupal, phpBB, Simple Machines gibi hazır sistemlerle uğraşanlar bilirler. Diğer sistemlerle beraber sorunsuz çalışmasını sağlamak için veritabanı tablolarında ön ek (prefix) denilen bir uygulama kullanılır.

Bazen bu eki, güvenlik açısından (ya da can sıkıntısından) değiştirmeniz gerekebilir. Aşağıda böyle durumlarda kullanabileceğiniz bir script (betik) sunuyorum.

Kendim bu scripti kullandığımda tablo adlarını değiştirmekte hiçbir sorun yaşamadım. ANCAK WORDPRESS'TE SADECE ÖN EKLERİ DEĞİŞTİRMENİZ TEK BAŞINA YETERLİ OLMUYOR! _options ve _usermeta tablolarında da bazı değişiklikler yapmanız gerekiyor. Onun için eğer bu konularda bilgili değilseniz bu işlemi uygulamamanızı öneriyorum.

Değişiklik yapmadan önce veritabanınızın yedeğini mutkala alınız. (Mazallah, şeytan doldurur. 😄 )

Kaynak kodu bana ait değil. Yazarın sitesine buradan ulaşabilir, kodu buradan indirebilir ya da yazının devamındakini kopyala yapıştır yapabilirsiniz.

 <?php /* MySQL Table Prefix Changer By Robert Dunham http://www.nilpo.com

This script can be used to change all of the table prefixes in a database. This can be useful as a security precaution when using preset table names like with phpBB. This can help prevent sql injections.

Additional information at http://www.nilpo.com

Download link: http://www.nilpo.com/pub/examples/prefix.php */?>

<html> <head> <title>MySQL Table Prefix Changer</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>

<body> <?php // Check for POST data $action = isset($_REQUEST['action'])?$_REQUEST['action']:false;

if (!$action) { ?> <form name="form1" method="post"> <table width="75%" border="0" cellspacing="2" cellpadding="2"> <tr> <td>Enter database name:</td> <td><input name="d" type="text" id="d" size="50"></td> </tr> <tr> <td>Enter database user</td> <td><input name="u" type="text" id="u" size="50"</td> </tr> <tr> <td>Enter database password:</td> <td><input name="p" type="password" id="p" size="50"></td> </tr> <tr> <td>Enter New Prefix:</td> <td><input name="n" type="text" id="n" size="50" value="(Do not include the trailing underscore)"></td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td colspan="2" align="center"><input name="action" type="hidden" id="action" value="data"> <input type="submit" name="Submit" value="Change Table Prefixes"></td> </tr> </table> </form> <?php } else {

$mysql_db = $_REQUEST['d']; $mysql_user = $_REQUEST['u']; $mysql_pass = $_REQUEST['p']; $table_prefix = $_REQUEST['n'];

// Open MySQL link $link = mysql_connect('localhost', $mysql_user, $mysql_pass); if (!$link) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br><br>';

// Select database and grab table list mysql_select_db($mysql_db, $link) or die ("Database not found."); $tables = mysql_list_tables($mysql_db);

// Pull table names into an array and replace prefixes $i = 0; while ($i < mysql_num_rows($tables)) { $table_name = mysql_tablename($tables, $i); $table_array[$i] = $table_name; $i++; }

// Pull table names into another array after replacing prefixes foreach ($table_array as $key => $value) { $table_names[$key] = replace_prefix($value, $table_prefix); }

// Write new table names back foreach ($table_array as $key => $value) { $query = sprintf('RENAME TABLE %s TO %s', $table_array[$key], $table_names[$key]); $result = mysql_query($query, $link); if (!$result) { $error = mysql_error(); echo "Could not $query : $error<br>"; } else { $message = sprintf('Successfully renamed %s to %s in %s', $table_array[$key], $table_names[$key], $mysql_db); echo "$message<br>"; } }

// Free the resources mysql_close($link); }

function replace_prefix($s, $prefix) { $pos = strpos($s, "_"); $s = substr($s, $pos + 1); $s = sprintf("%s_%s", $prefix, $s); return $s; } ?>

Dipnot: Prefixi değiştirdikten sonra Leyla'lık yapıp, yazılımızın ayar dosyalarını (config) yeni ön eke göre (prefix) ayarlamayı unutmayın. 😃

İyi akşamlar.