Foros del Web » Programando para Internet » PHP »

Problema con Update a bd MySQL

Estas en el tema de Problema con Update a bd MySQL en el foro de PHP en Foros del Web. Buenas, estoy con un inconveniente (medio pavo asumo). Estoy teniendo problemas con un update a una tabla MySql desde un script php. Yendo por partes ...
  #1 (permalink)  
Antiguo 18/04/2011, 12:38
 
Fecha de Ingreso: agosto-2010
Mensajes: 100
Antigüedad: 13 años, 7 meses
Puntos: 2
Problema con Update a bd MySQL

Buenas, estoy con un inconveniente (medio pavo asumo). Estoy teniendo problemas con un update a una tabla MySql desde un script php.
Yendo por partes la estructura de la tabla es la siguiente:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `mdl_course` (
  2.   `category` bigint(10) unsigned NOT NULL default '0',
  3.   `sortorder` bigint(10) unsigned NOT NULL default '0',
  4.   `fullname` varchar(254) NOT NULL default '',
  5.   `shortname` varchar(100) NOT NULL default '',
  6.   `idnumber` varchar(100) NOT NULL default '',
  7.   `summary` text,
  8.   `summaryformat` tinyint(2) unsigned NOT NULL default '0',
  9.   `format` varchar(10) NOT NULL default 'topics',
  10.   `showgrades` tinyint(2) unsigned NOT NULL default '1',
  11.   `modinfo` longtext,
  12.   `newsitems` mediumint(5) unsigned NOT NULL default '1',
  13.   `startdate` bigint(10) unsigned NOT NULL default '0',
  14.   `numsections` mediumint(5) unsigned NOT NULL default '1',
  15.   `marker` bigint(10) unsigned NOT NULL default '0',
  16.   `maxbytes` bigint(10) unsigned NOT NULL default '0',
  17.   `legacyfiles` smallint(4) unsigned NOT NULL default '0',
  18.   `showreports` smallint(4) unsigned NOT NULL default '0',
  19.   `visible` tinyint(1) unsigned NOT NULL default '1',
  20.   `visibleold` tinyint(1) unsigned NOT NULL default '1',
  21.   `hiddensections` tinyint(2) unsigned NOT NULL default '0',
  22.   `groupmode` smallint(4) unsigned NOT NULL default '0',
  23.   `groupmodeforce` smallint(4) unsigned NOT NULL default '0',
  24.   `defaultgroupingid` bigint(10) unsigned NOT NULL default '0',
  25.   `lang` varchar(30) NOT NULL default '',
  26.   `theme` varchar(50) NOT NULL default '',
  27.   `timecreated` bigint(10) unsigned NOT NULL default '0',
  28.   `timemodified` bigint(10) unsigned NOT NULL default '0',
  29.   `requested` tinyint(1) unsigned NOT NULL default '0',
  30.   `restrictmodules` tinyint(1) unsigned NOT NULL default '0',
  31.   `enablecompletion` tinyint(1) unsigned NOT NULL default '0',
  32.   `completionstartonenrol` tinyint(1) unsigned NOT NULL default '0',
  33.   `completionnotify` tinyint(1) unsigned NOT NULL default '0',
  34.   PRIMARY KEY  (`id`),
  35.   KEY `mdl_cour_cat_ix` (`category`),
  36.   KEY `mdl_cour_idn_ix` (`idnumber`),
  37.   KEY `mdl_cour_sho_ix` (`shortname`)
  38. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Central course table' AUTO_INCREMENT=69 ;

Lo que busco hacer con el script es asignar los valores para el campo idnumber de cada una de las tuplas de la tabla mdl_courses.
La función de actualización es la siguiente:
Código PHP:
function modIdCourse(){
    
$query "SELECT mc.id FROM mdl_course mc";
    
$res mysql_query($query);
    if (
$res == false){
        echo 
"Error en la consulta de Cursos Moodle.<br/>";
    }else{
        while (
$row mysql_fetch_array($res)){
            
$id $row[0];
            echo 
"id: $id / ";
            
$idnum "'C".$id."'";
            echo 
"idnumber: $idnum";
            
$query "UPDATE mdl_course SET idnumber = $idnum WHERE idnumber = $id";
            
$res mysql_query($query);
            if (
$res == false){
                echo 
"Error en la actualizacion.<br/>";
            }else{
                echo 
"Curso $id actualizado. <br/>";
            }
        }
    }

Las salidas de los echo son las siguientes:
Cita:
La libreria db fue incluida correctamente.
id: 1 / idnumber: 'C1'Curso 1 actualizado.
Y la salida del log de php es:
Cita:
[18-Apr-2011 14:30:54] PHP Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /media/Datos/www/manantiales/alumnos/db.php on line 26
La línea 26 es la siguiente: while ($row = mysql_fetch_array($res))
Intenté con todos los tipos de comillas posibles, y no logro que modifique todos los campos, ni siquiera actualiza la primer tupla que es la que informa los echos.
Bueno, agradecería cualquier pista, desde ya muchas gracias!.
  #2 (permalink)  
Antiguo 18/04/2011, 12:54
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Problema con Update a bd MySQL

Hola, primero intenta darle la variable de coneccion a tu query, a veces PHP no la reconoce, y como veo que estas haciendolo en una funcion es posible que ese sea el problema:

$res = mysql_query($query,$cnx);

($cnx debe ser la variable que estas usando para conectar)

Prueba si te resulta con eso, si no especificas que conexion a mysql estas usando PHP se puede confundir.
  #3 (permalink)  
Antiguo 18/04/2011, 15:15
 
Fecha de Ingreso: agosto-2010
Mensajes: 100
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: Problema con Update a bd MySQL

Stramin gracias por la respuesta. La función de conexión es la siguiente:
Código PHP:
function mdlConect(){
# Info db:
$usr 'marcelov_rama';
$pass '**************';
$host 'xx.xxx.xxx.xx';
$basedatos 'marcelov_moodlev2';

$conect mysql_connect($host,$usr,$pass);
mysql_select_db($basedatos$conect) OR die ("[E] No se pudo realizar la conexion.<br/>");

Tenía entendido que pasarle la conexión era opcional, que PHP "asociaba" a la última conexión hecha.
Le acabo de pasar la variable $conect al mysql_query, pero directamente falla la consulta.
  #4 (permalink)  
Antiguo 18/04/2011, 15:22
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Problema con Update a bd MySQL

Intenta esto:

Código PHP:
function mdlConect(){
# Info db:
$usr 'marcelov_rama';
$pass '**************';
$host 'xx.xxx.xxx.xx';
$basedatos 'marcelov_moodlev2';

$conect mysql_connect($host,$usr,$pass) or die ("Imposible realizar la conexion");
mysql_select_db($basedatos$conect);

Es muy probable que la falla sea mysql_connect, asi que con eso lo comprobaras ;)

Ademas, veo que en el otro codigo, declaras a $idnum con una letra, por lo que la query debe ir asi:
Código PHP:
$query "UPDATE mdl_course SET idnumber = '".$idnum."' WHERE idnumber = $id"
Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 19/04/2011, 05:00
 
Fecha de Ingreso: agosto-2010
Mensajes: 100
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: Problema con Update a bd MySQL

Lo estoy mandando así a $idnum:
Código PHP:
$idnum "\""."C".$id."\""
  #6 (permalink)  
Antiguo 19/04/2011, 05:01
 
Fecha de Ingreso: agosto-2010
Mensajes: 100
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: Problema con Update a bd MySQL

Ya lo he solucionado,o al menos en parte.
La consulta de por si estaba mal, en la parte del where, acá está corregida:
Código PHP:
function modIdCourse(){
    
$query "SELECT mc.id FROM mdl_course mc";
    
$res mysql_query($query);
    if (
$res == false){
        echo 
"Error en la consulta de Cursos Moodle.<br/>";
    }else{
        while (
$row mysql_fetch_array($res)){
            
$id $row[0];
            echo 
"id: $id / ";
            
$idnum "'"."C".$id."'";
            echo 
"idnumber: $idnum";
            
$query "UPDATE mdl_course SET idnumber = $idnum WHERE id = $id";
            
$res mysql_query($query);
            if (
$res == false){
                echo 
"Error en la actualizacion.<br/>";
            }else{
                echo 
"Curso $id actualizado. <br/>";
            }
        }
    }

Aún así, solo modifica el primer registro y no todos.

Edito: Logré solucionarlo. Era pura y exclusivamente culpa de mi despiste. Estaba usando la variable $res tanto para el row de los id, como para la consulta del update. Así jamás iba a andar :D

Última edición por ramiromd; 19/04/2011 a las 05:50

Etiquetas: bd, mysql, update
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 11:59.