Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema para registrar datos en tabla mysql

Estas en el tema de Problema para registrar datos en tabla mysql en el foro de PHP en Foros del Web. Buen día, En la empresa donde trabajo, usamos un sistema web realizado en PHP con MySQL. Tenemos instalado el XAMPP en Windows Server y también ...
  #1 (permalink)  
Antiguo 01/02/2013, 11:15
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 3 meses
Puntos: 0
Problema para registrar datos en tabla mysql

Buen día,

En la empresa donde trabajo, usamos un sistema web realizado en PHP con MySQL. Tenemos instalado el XAMPP en Windows Server y también lo tengo instalado localmente en mi PC con Win 7 de 64 bits. Todo estaba funcionando normal hasta hace un par de días. Al querer ingresar un registro de asistentes a un evento, no me permite hacerlo y me sale una ventana con el mensaje "Channel disconnected". Exporté e importé datos sobre una base de datos anterior, pero eso no me solucionó el problema. Finalmente, borré como unos 10 registros de la tabla de los asistentes y me permitió nuevamente ingresar datos, hasta que nuevamente me sale el mismo error. Entonces, parecería que existe un problema en la capacidad de almacenamiento de la tabla. Lo que me parece raro es que dicha tabla tiene 16941 registros y ocupa actualmente 1.8 MB, que es poco para que una tabla se llene.

Revisando el archivo orb_php_errors.txt me dice que sucedió lo siguiente:

01-Feb-2013 11:29:12] PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 841147 bytes) in C:\xampp\htdocs\weborb\Weborb\Writer\FlashorbBinar yWriter.php on line 109

El código de ese archivo es el siguiente:

<?php
/************************************************** *****************
* FlashorbBinaryWriter.php
* Copyright (C) 2006-2007 Midnight Coders, LLC
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is WebORB Presentation Server (R) for PHP.
*
* The Initial Developer of the Original Code is Midnight Coders, LLC.
* All Rights Reserved.
************************************************** ******************/

class FlashorbBinaryWriter
{

private $m_stream;

public function __construct(&$stream)
{
$this->m_stream = &$stream;
}

public function write($value)
{
//$this->m_stream .= chr($value & 0xff);
$this->m_stream .= pack("c", $value);
}

public function writeDouble($value)
{
$double = pack("d", $value);

$this->m_stream .= strrev($double);
}

public function writeInt($value)
{
$this->m_stream .= pack("N", $value);
}

public function writeShort($value)
{
$this->m_stream .= pack("n", $value);
}

public function writeUtf(&$utfValue, $long = FALSE)
{
// $utfValue = $value;//utf8_encode($value);
// $utfValue = utf8_encode($utfValue);

$strlen = strlen($utfValue);

if ($strlen <= 65535)
{
$utfLen = $strlen;
}
else
{
$utfLen = $strlen << 1 | 0x1;
}

if (!$long && $utfLen > 65535)
{
throw new ApplicationException( "utf data format exception" );
}

if ($long)
{
$this->writeVarInt($strlen << 1 | 0x1);
}
else
{
$this->writeShort($strlen);
}


$this->m_stream .= $utfValue;
}

public function writeVarInt($v)
{
if ($v < 128)
{
//$this->write($v);
$this->m_stream .= pack("c", $v);
}
else if ($v < 16384)
{
//$this->write($v >> 7 & 0x7F | 0x80);
//$this->write($v & 0x7F);

$this->m_stream .= chr($v >> 7 & 0x7F | 0x80 ) . chr($v & 0x7F);
}
else if ($v < 2097152)
{
//$this->write($v >> 14 & 0x7F | 0x80);
//$this->write($v >> 7 & 0x7F | 0x80);
//$this->write($v & 0x7F);

$this->m_stream .= chr($v >> 14 & 0x7F | 0x80) . chr($v >> 7 & 0x7F | 0x80) . chr($v & 0x7F);
}
else if ($v < 1073741824)
{
//$this->write($v >> 22 & 0x7F | 0x80);
//$this->write($v >> 15 & 0x7F | 0x80);
//$this->write($v >> 8 & 0x7F | 0x80);
//$this->write($v & 0xFF);

$this->m_stream .= chr($v >> 22 & 0x7F | 0x80) . chr($v >> 15 & 0x7F | 0x80) . chr($v >> 8 & 0x7F | 0x80) . chr($v & 0xFF);
}
else
{
throw new ServiceException("value out of range - " + $v);
}
}

public function writeLong($value)
{
$this->m_stream .= pack('l',$value);

}
public function getStream()
{
return $this->m_stream;
}

}

?>


Aquí les dejo como está estructurada la tabla:



Por favor, denme una ayuda con este tema, porque necesitamos seguir ingresando los datos.

Gracias de antemano,

Cesar

Última edición por cpf27; 01/02/2013 a las 11:20
  #2 (permalink)  
Antiguo 01/02/2013, 11:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema para registrar datos en tabla mysql

Si te estas quedando sin espacio, aumenta el memory_limit en tu php.ini, por defecto viene en 64MB si no mal recuerdo...

Saludos.
  #3 (permalink)  
Antiguo 01/02/2013, 11:44
Avatar de ArkangelGammar  
Fecha de Ingreso: enero-2011
Ubicación: <?php $persona->ubicacion('ArkangelGammar'); ?>
Mensajes: 179
Antigüedad: 13 años, 4 meses
Puntos: 19
Respuesta: Problema para registrar datos en tabla mysql

La clase que estas utilizando trata de escribir mas bytes de los que corresponden.

Seria bueno tambien que postearas el codigo con la llamada a la clase.

Saludos
__________________
"No entiendes algo al menos que seas capaz de explicarselo a tu abuela.
Cada dia sabemos mas....y entendemos menos...."

A. Einstein - Genio mas alla de la razon.
  #4 (permalink)  
Antiguo 01/02/2013, 12:10
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema para registrar datos en tabla mysql

Gracias por sus respuestas.

Este es el código que está asociado a dicha tabla:


<?
//header("Content-type: text/xml");
require_once('libs/class.BDmysql.php');
require_once('libs/fxBD.php');

class personal_ous{
var $id;
var $tipo;
var $nombre;
var $ape;
var $edad;
var $sex;
var $inst;
var $activo;
var $dni;
var $cargo_id;
var $cu_id;
var $ju_id;
var $ti_cargo;
var $id_gi;
public static function Insert($tipo,$nombre,$ape,$edad,$inst,$sex,$activo ,$dni,$cargo_id,$cu_id,$ju_id,$ti_cargo,$id_gi,$pe rsonal)
{
$id=getNewId('assistant_id','personal_ous');
$tipo=MAYUSC(utf8_decode($tipo));
$nombre=MAYUSC(utf8_decode($nombre));
$ape=MAYUSC(utf8_decode($ape));
$inst=MAYUSC(utf8_decode($inst));
$a=new BDmysql();
$conexion=$a->conectarMysql();
if($conexion){
$query='INSERT INTO personal_ous(assistant_id,assistant_type,assistant _name,assistant_lastname,assistant_edad,assistant_ sex,assistant_institution,assistant_active,assista nt_dni,cargo_id,cu_id,ju_id,tipoCargo_id,grado_ins truccion_id,assistant_personal)
VALUES("'.$id.'","'.$tipo.'","'.$nombre.'","'.$ape .'","'.$edad.'","'.$sex.'","'.$inst.'",
"'.$activo.'","'.$dni.'","'.$cargo_id.'","'.$cu_id .'","'.$ju_id.'","'.$ti_cargo.'","'.$id_gi.'","'.$ personal.'")';
$a->consulta($query);

$a->closeMysql();
return true;
}
return false;
}
public static function Update($id,$tipo,$nombre,$ape,$edad,$inst,$sex,$ac tivo,$dni,$cargo_id,$cu_id,$ju_id,$ti_cargo,$id_gi )
{
$tipo=MAYUSC(utf8_decode($tipo));
$nombre=MAYUSC(utf8_decode($nombre));
$ape=MAYUSC(utf8_decode($ape));
$inst=MAYUSC(utf8_decode($inst));
$a=new BDmysql();
$conexion=$a->conectarMysql();
if($conexion){
$query='UPDATE personal_ous set assistant_type="'.$tipo.'",assistant_name="'.$nomb re.'",
assistant_lastname="'.$ape.'",assistant_edad="'.$e dad.'",assistant_sex="'.$sex.'",assistant_institut ion="'.$inst.'",
assistant_active="'.$activo.'",assistant_dni="'.$d ni.'",cargo_id="'.$cargo_id.'",cu_id="'.$cu_id.'", ju_id="'.$ju_id.'",
tipoCargo_id="'.$ti_cargo.'",grado_instruccion_id= "'.$id_gi.'"
WHERE assistant_id="'.$id.'"';
echo $query;
$a->consulta($query);
$a->closeMysql();
return true;
}
return false;
}
public static function Delete($id)
{
$a=new BDmysql();
$conexion=$a->conectarMysql();
$query='DELETE from personal_ous WHERE assistant_id="'.$id.'"';
$result=$a->consulta($query);
$a->closeMysql();
return true;
}


public static function ListaC($condicion){
$a=new BDmysql();
$conexion=$a->conectarMysql();
if($conexion){
$query="SELECT
personal_ous.assistant_id,
cu.cu_razon_social,
cargo.descripcion,
tipocargo.tc_nombre,
personal_ous.assistant_name,
personal_ous.assistant_lastname,
CONCAT(personal_ous.assistant_name,' ',personal_ous.assistant_lastname) AS 'nomcompleto',
personal_ous.assistant_institution,
personal_ous.assistant_active,
personal_ous.tipoCargo_id,
grado_instruccion.gi_descripcion
FROM
personal_ous
INNER JOIN grado_instruccion ON (personal_ous.grado_instruccion_id=grado_instrucci on.grado_instruccion_id)
INNER JOIN cu ON (personal_ous.cu_id=cu.cu_id)
INNER JOIN cargo ON (personal_ous.cargo_id=cargo.cargo_id)
AND (cargo.tipoCargo_id=personal_ous.tipoCargo_id)
INNER JOIN tipocargo ON (tipocargo.tipoCargo_id=personal_ous.tipoCargo_id) ".$condicion;
$result=$a->consulta($query);
$a->closeMysql();
}
return $result;
}

public static function ListaJ($condicion){
$a=new BDmysql();
$conexion=$a->conectarMysql();
if($conexion){
$query="SELECT
personal_ous.assistant_id,
ju.ju_nombre,
cargo.descripcion,
tipocargo.tc_nombre,
personal_ous.assistant_name,
personal_ous.assistant_lastname,
CONCAT(personal_ous.assistant_name,' ',personal_ous.assistant_lastname) as 'nomcompleto',
personal_ous.assistant_institution,
personal_ous.assistant_active,
personal_ous.tipoCargo_id,
grado_instruccion.gi_descripcion
FROM
personal_ous
INNER JOIN grado_instruccion ON (personal_ous.grado_instruccion_id=grado_instrucci on.grado_instruccion_id)
INNER JOIN ju ON (personal_ous.ju_id=ju.ju_id)
INNER JOIN cargo ON (personal_ous.cargo_id=cargo.cargo_id)
AND (cargo.tipoCargo_id=personal_ous.tipoCargo_id)
INNER JOIN tipocargo ON (cargo.tipoCargo_id=tipocargo.tipoCargo_id) ".$condicion;
$result=$a->consulta($query);
$a->closeMysql();
}
return $result;
}



public static function getPersonal($id){
$comp=new Personal_ous();
$a=new BDmysql();
$conexion=$a->conectarMysql();
if($conexion){
$query='SELECT
personal_ous.assistant_type,
personal_ous.assistant_name,
personal_ous.assistant_lastname,
personal_ous.assistant_edad,
personal_ous.assistant_sex,
personal_ous.assistant_institution,
personal_ous.assistant_active,
personal_ous.assistant_dni,
personal_ous.cargo_id,
personal_ous.cu_id,
personal_ous.ju_id,
personal_ous.tipoCargo_id,
personal_ous.grado_instruccion_id
FROM
personal_ous
WHERE assistant_id='.$id;
$result=$a->consulta($query);
$v=mysql_fetch_row($result);
if($result){
$comp->id=$id;
$comp->tipo=$v[0];
$comp->nombre=$v[1];
$comp->ape=$v[2];
$comp->edad=$v[3];
$comp->sex=$v[4];
$comp->inst=$v[5];
$comp->activo=$v[6];
$comp->dni=$v[7];
$comp->cargo_id=$v[8];
$comp->cu_id=$v[9];
$comp->ju_id=$v[10];
$comp->ti_cargo=$v[11];
$comp->id_gi=$v[12];
}
$a->closeMysql();
}
return $comp;
}
public static function Insert2($tipo,$nombre,$ape,$edad,$inst,$sex,$activ o,$dni,$cargo_id,$cu_id,$ju_id,$ti_cargo,$id_gi,$p ersonal)
{
$id=getNewId('assistant_id','personal_ous');
$tipo=MAYUSC(utf8_decode($tipo));
$nombre=MAYUSC(utf8_decode($nombre));
$ape=MAYUSC(utf8_decode($ape));
$inst=MAYUSC(utf8_decode($inst));
$a=new BDmysql();
$conexion=$a->conectarMysql();
if($conexion){
$query='INSERT INTO personal_ous(assistant_id,assistant_type,assistant _name,assistant_lastname,assistant_edad,assistant_ sex,assistant_institution,assistant_active,assista nt_dni,cargo_id,cu_id,ju_id,tipoCargo_id,grado_ins truccion_id,assistant_personal)
VALUES("'.$id.'","'.$tipo.'","'.$nombre.'","'.$ape .'","'.$edad.'","'.$sex.'","'.$inst.'",
"'.$activo.'","'.$dni.'","'.$cargo_id.'","'.$cu_id .'","'.$ju_id.'","'.$ti_cargo.'","'.$id_gi.'","'.$ personal.'")';
$a->consulta($query);

$a->closeMysql();
return $id;
}
return false;
}
public static function Lista($condicion){
$a=new BDmysql();
$conexion=$a->conectarMysql();
if($conexion){
$query="SELECT
personal_ous.assistant_id
, personal_ous.assistant_type
, personal_ous.assistant_name
, personal_ous.assistant_lastname
, personal_ous.assistant_edad
, personal_ous.assistant_sex
, personal_ous.assistant_institution
, personal_ous.assistant_dni
, personal_ous.grado_instruccion_id
, grado_instruccion.gi_descripcion
FROM
grado_instruccion
LEFT JOIN personal_ous
ON (grado_instruccion.grado_instruccion_id = personal_ous.grado_instruccion_id) ".$condicion;
$result=$a->consulta($query);
$a->closeMysql();
}
return $result;
}
}

//echo component::getNewCode();
//ersonal_ous::Insert("hola","cara","12","asdfa","f" ,"si","12345633","2","1","1","1","1");
//ju::Delete("6");
//cuenca::Update(3,"C1","holxx","ss","dd","hola","ho la","Si");
?>


Espero que eso sea lo que me piden. Voy a aumentarle la memoria en PHP.ini a 128MB, estaba en 32 MB. Voy a reiniciar porque me sigue saliendo el mismo error.

Lo que tengo dudas es que hay 3 archivos php.ini en estas carpetas:

C:\xampp
C:\xampp\php
C:\xampp\apache

También hay un archivo php4.ini y php5.ini. Esos los debo dejar así como están?
  #5 (permalink)  
Antiguo 01/02/2013, 12:11
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema para registrar datos en tabla mysql

Con respecto a class.BDmysql.php:


<?php
define (DEBUG,1); //Modo de Depuración activado(para desarrolladores 2) o desactivado(para usuario comunes 1)
define(SERVER,'localhost');
define(USER,'root');
define(PASSWORD,'');
//define(BD,'proymaye_nippon');
define(BD,'sismonitoreo');


//funciones relacionadas con la base de datos
class BDmysql{
var $BaseDatos; //nombre de la base de datos
var $conexion; //conexion asociada a mysql
var $msgERROR;
function errorMSG($text,$pagEmisor){ // manejo de los mensajes de errores
switch (DEBUG){
case 1: echo"{success :false,mensaje:\"".mysql_error()."\"}";
break;

case 2:
if(strcmp($text,NULL)!=0){
$mensajeError="<br><table width='80%' style='border: 1px solid #aa0000;' align=center><tr><td align=center><font style='color: #aa0000; font-family: verdana; font-size: 12px; '><br>$pagEmisor <br><b> $text </b><br>";
if(strcmp(mysql_error(),NULL)!=0){
$mensajeError.="<p>Comentario: </p>".mysql_error();
echo($mensajeError."</font> </td></tr></table><br> ");
}else{
$mensajeError.="</font> </td></tr></table><br> ";
echo($mensajeError);
}
}else{ echo("");}
break;
}
return false;
}

function conectarMysql(){
$this->conexion =mysql_connect(SERVER,USER,PASSWORD); //abrimos la conexion
if($this->conexion==false) {
$this->conexion =$this->errorMSG("ERROR : no se pudo realizar la conexion",$_SERVER['PHP_SELF']);
}else{
$this->BaseDatos=BD;
$Estado=mysql_select_db($this->BaseDatos,$this->conexion);
if($Estado==false) {
$this->conexion =$this->errorMSG("ERROR : no se pudo accesar a la BASE DE DATOS",$_SERVER['PHP_SELF']); }
}
return $this->conexion;
}

function returnConexion(){
return $this->conexion;
}

function consulta($query){
if(DEBUG==2){ $this->msgERROR="AL realizar la consulta <br> <span class=a3> ".$query."</span> <br>"; }
$Estado=mysql_query($query,$this->conexion);
if($Estado==false){
$Estado=$this->errorMSG($this->msgERROR,$_SERVER['PHP_SELF']);
}else{
/* if(mysql_affected_rows()==0){ // POSIBLE ERROR: revisar esta funcion para que acepte a los SELECT
$Estado=$this->errorMSG("PROBABLE ERROR: $cadenaDeConsulta <br> Ningún registro ha sido afectado en la base de datos... <br> ",$_SERVER['PHP_SELF']);
}*/
}
return $Estado;
}

function closeMysql(){
if(mysql_close($this->conexion)==false){
$this->errorMSG("ERROR: al cerrar la conexion a la Base de Datos",$_SERVER['PHP_SELF']);
}
}
}

?>
  #6 (permalink)  
Antiguo 01/02/2013, 13:31
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema para registrar datos en tabla mysql

Se solucionó el problema cambiando el valor del memory_limit en el php.ini. Gracias amigos.

Mi duda es cual debería ser el tamaño apropiado, estaba en 16M en el de la carpeta apache y en los otros 32M, los he cambiado a 128M. ¿Está bien ese número o es muy grande? Va a repercutir en el tamaño físico de la tabla (es decir más megabytes?)

Saludos,
Cesar
  #7 (permalink)  
Antiguo 01/02/2013, 13:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema para registrar datos en tabla mysql

No, eso es el límite de memoria que usa PHP cuando se esta ejecutando y pues, realmente el límite esta dado por la capacidad de tu server
  #8 (permalink)  
Antiguo 01/02/2013, 13:55
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema para registrar datos en tabla mysql

Gracias GatorV. Bueno 128MB de la RAM no es mucho. :)
  #9 (permalink)  
Antiguo 01/02/2013, 14:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema para registrar datos en tabla mysql

Ojo que ese límite es lo que va a consumir como límite por cada ejecución, es decir si te acabas los 128 MB y hay 2 usuarios, son 256MB...
  #10 (permalink)  
Antiguo 01/02/2013, 14:08
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Problema para registrar datos en tabla mysql

Eso quiere decir que con un servidor de 8GB de RAM, solo podrían haber unos 50 usuarios al mismo tiempo, verdad?
  #11 (permalink)  
Antiguo 01/02/2013, 14:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema para registrar datos en tabla mysql

Solo si consumen el máximo de memoria, no significa que con cada instancia se vaya a comer toda la memoria, es simplemente el máximo que tiene permitido.

Saludos.

Etiquetas: mysql, registro, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:25.