Ver Mensaje Individual
  #6 (permalink)  
Antiguo 30/04/2006, 05:08
Avatar de lcervantes
lcervantes
 
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años, 1 mes
Puntos: 0
Creo que mi problema esta en la clase SQL.
ya que sin necesidad de usarla en otras clases si quiero realizar 2 instancias diferentes de la misma clase, para poder realizar una consulta dentro de otra me da problemas..

aqui va la clase SQL.

/////////////////////////////////// CLASS SQL////////////////////////////////////
<?
class SQL{
//Parametros de conexion
public $SERVER;
public $USER;
public $PASSWD;
public $DATABASE;
public $DATABASETYPE;
//Parametros de SQL
private $link;
private $result;
private $row;

//************* Connect ************************
public function Connect(){
switch ($this->DATABASETYPE){
case 'MSSQL': $this->link = mssql_connect($this->SERVER, $this->USER, $this->PASSWD) or die ("Could not connect MSSQL");
mssql_select_db($this->DATABASE,$this->link) or die ("Could not select database " . $this->DATABASE. " in MSSQL");
break;
case 'MYSQL': $this->link = mysql_connect($this->SERVER, $$this->USER, $$this->PASSWD) or die ("Could not connect MYSQL");
mysql_select_db($this->DATABASE,$this->link) or die ("Could not select database " . $param_conection['database'] . " in MYSQL");
break;
case 'ODBC': $this->link = odbc_connect($this->SERVER, $this->USER, $this->PASSWD ,'SQL_CUR_USE_ODBC');
break;
default: echo "Error tipo no seleccionado en CONNECT<br>";
break;
}
}

//************* Query ************************
//Devuelve en $result los resultados de la query.
public function Query($query, $ver_sql='N'){
if ($ver_sql=='S'){
echo "Query:$query<br>";
}
switch ($this->DATABASETYPE){
case "MSSQL": $this->result = mssql_query($query,$this->link);
break;
case "MYSQL": $this->result = mysql_query($query, $this->link);
break;
case "ODBC": $this->result = @odbc_exec($this->link,$query) or die ("<b>Error!</b> Couldn't Run Query:<br><br>$query<br><br>Error Code:" . odbc_error() . "<br>Description: " . odbc_errormsg() );
break;
default : echo "Tipo no seleccionado en QUERY.<br>";
break;
}
return ($this->result);
}

//************* GetHeaderRow ******************
public function GetHeaderRow(){
switch($this->DATABASETYPE){
case "MSSQL": $this->row = mssql_fetch_field($this->result);
break;
case "MYSQL": $this->row = mysql_fetch_field($this->result);
break;
default: echo "Tipo no seleccionado en GET HEADER ROW.<br>";
break;
}
return($this->row);
}

//************* GetFieldName *******************
public function GetFieldName($numerocampo) {
switch($this->DATABASETYPE){
case "MSSQL": return mssql_field_name($this->result, $numerocampo);
break;
case "MSSQL": return mysql_field_name($this->result, $numerocampo);
break;
case "MSSQL": return odbc_field_name($this->result, $numerocampo);
break;
default : echo "Tipo no seleccionado en GET FIELD NAME.<br>";
break;
}
}

//************* GetFetchRow *******************
//Te permite hacer referencia a los campos solo por numeros
public function GetFetchRow(){
switch($this->DATABASETYPE){
case "MSSQL": $this->row = mssql_fetch_row($this->result);
break;
case "MYSQL": $this->row = mysql_fetch_row($this->result);
break;
case "ODBC": $this->row = odbc_fetch_row($this->result);
break;
default: echo "Tipo no seleccionado en GET FECTH ROW<br>";
break;
}
return($this->row);
}

//************* GetFetchRow *******************
//Te permite hacer referencia a los campos por numeros o por nombres
public function GetFetchArray(){
switch($this->DATABASETYPE){
case "MSSQL": $this->row = mssql_fetch_array($this->result);
break;
case "MYSQL": $this->row = mysql_fetch_array($this->result);
break;
case "ODBC": $this->row = odbc_fetch_array($this->result);
break;
default: echo "Tipo no seleccionado en GET FECTH ROW<br>";
break;
}
return($this->row);
}

//************* GetValue *******************
//id_name será numero o nombre dependiendo de lo que utilice anteriormente GetFetchRow o GetFetchArray
public function GetValue($id_name){
$value = $this->row[$id_name];
return($value);
}

//************* NumFields *********************
public function NumFields(){
switch($this->DATABASETYPE){
case "MSSQL": return(mssql_num_fields($this->result));break;
case "MYSQL": return(mysql_num_fields($this->result));break;
case "ODBC": return(odbc_num_fields($this->result));break;
default: echo "Tipo no seleccionado en NUMFIELDS.<br>";break;
}
}

//************* Num Rows **********************
public function NumRows(){
switch ($this->DATABASETYPE){
case "MSSQL": return (mssql_num_rows($this->result)); break;
case "MYSQL": return (mysql_num_rows($this->result)); break;
case "ODBC": return (odbc_num_rows($this->result));break;
default: echo "Error tipo no seleccionado en NUMROWS<br>";break;
}
}

//************* Inserted ID ********************
public function InsertedID(){
switch ($this->DATABASETYPE){
case "MSSQL": echo "Opcion no implementada para MSSQL"; break;
case "MYSQL": return (mysql_insert_id($this->link)); break;
case "ODBC": echo "Opcion no implementada para ODBC";break;
default: echo "Error tipo no seleccionado en INSERT ID<br>";break;
}
}

//************** Table ************************
public function Table(){
$Cadena = "<Table border=1 cellpadding=0 cellspacing=0>";
switch ($this->DATABASETYPE){
case "MSSQL":
//Nombre Campos
$Cadena = "$Cadena<tr>";
while ($field = mssql_fetch_field($this->result)){
$Cadena = "$Cadena<th>$field->name</th>";
}
//Registros
$Cadena = "$Cadena</tr>";
while ($row = mssql_fetch_row($this->result)){
$Cadena = "$Cadena<tr>";
for($i=0;$i<count($row);$i++){
$valor = (strlen(trim($row[$i]))==0)?"&nbsp":$row[$i];
$Cadena = "$Cadena<td>$valor</td>";
}
$Cadena = "$Cadena</tr>";
}
break;
case "MYSQL":
//Nombre Campos
$Cadena = "$Cadena<tr>";
while ($field = mysql_fetch_field($this->result)){
$Cadena = "$Cadena<th>$field->name</th>";
}
//Registros
$Cadena = "$Cadena</tr>";
while ($row = mysql_fetch_row($this->result)){
$Cadena = "$Cadena<tr>";
for($i=0;$i<count($row);$i++){
$valor = ($row[$i]=="")?"&nbsp":$row[$i];
$Cadena = "$Cadena<td>$valor</td>";
}
$Cadena = "$Cadena</tr>";
}
break;
case "ODBC":
//Nombre Campos
$Cadena = "$Cadena<tr>";
$TotalCampos = odbc_num_fields($this->result);
for ($i=1 ; $i<=$TotalCampos ;$i++){
$Cadena = "$Cadena<th>" . odbc_field_name($this->result,$i) . "</th>";
}
//Registros
$Cadena = "$Cadena</tr>";
while (odbc_fetch_row($this->result)){
$Cadena = "$Cadena<tr>";
for($i=1;$i<= $TotalCampos;$i++){
$row = trim(odbc_result($this->result,$i));
$valor = (strlen($row) == 0)?"&nbsp":$row;
$Cadena = "$Cadena<td>$valor</td>";
}
$Cadena = "$Cadena</tr>";
}
$Cadena = "$Cadena</tr>";
break;
default: echo "Error tipo no seleccionado en TABLE<br>"; break;
}
$Cadena = $Cadena . "</Table>";
return ($Cadena);
}

//************* CLose ************************
function __destruct(){
switch($this->DATABASETYPE){
case "MSSQL":
mssql_free_result($this->result);
mssql_close($this->link);
break;
case "MYSQL":
mysql_free_result($this->result);
mysql_close($this->link);
break;
case "ODBC":
odbc_free_result($this->result);
odbc_close($this->link);
break;
default: echo "Error tipo no seleccionado en CLOSE"; break;
}
}
}
?>

///////////////////// main.php////////////////////////////////////////////

<?
$DATABASETYPE = 'MSSQL';
$SERVER = 'server';
$DATABASE = 'database';
$USER = 'usu';
$PASSWD = 'passwrod';
include_once($_SERVER['DOCUMENT_ROOT'] . '/class/sql.class.php');
$SQL = new SQL();
$SQL->DATABASETYPE = $DATABASETYPE;
$SQL->SERVER = $SERVER;
$SQL->DATABASE = $DATABASE;
$SQL->USER = $USER;
$SQL->PASSWD = $PASSWD;
$SQL->Connect();
$SQL->Query($query);
while ($row = $SQL->GetFetchArray()){
$NOM_TABLA = $row['TABLE_NAME'];
echo "<br>---------- INI $NOM_TABLA -------------<br>";
$SQL2 = new SQL();
$SQL2->DATABASETYPE = $DATABASETYPE;
$SQL2->SERVER = $SERVER;
$SQL2->DATABASE = $DATABASE;
$SQL2->USER = $USER;
$SQL2->PASSWD = $PASSWD;
$SQL2->Connect();
$query2 = "Select COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH ";
$query2 .= "From INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '" . $NOM_TABLA . "' ";
$query2 .= "Order By ORDINAL_POSITION";
$SQL2->Query($query2);
$SQL2->Table();
echo "---------- FIN $NOM_TABLA -------------<br>";
}
echo "FIN";
/////////////////// FIN MAIN ///////////////////////
se supone que al crear $SQL tiene unos valores y al crear SQL2 tiene otros valores que son diferentes...
porque al finalizar el primer SQL2 y al pasar al siguiente registro de SQL ya me da problemas? Destruye la instanca de SQL2 y al parecer tambien la SQL....

Muchas gracias.