Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: __MICHEL__ en 01 de Abril 2016, 14:44

Título: Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: __MICHEL__ en 01 de Abril 2016, 14:44
Hola, tengo este php que me da error de variable por estar depreciada (deprecated), necesito ayuda para que me indiquen como la corrigo.

El error que me da es que en la linea 6, que me dice que ya está depreciada, a ver, como que ya esa función esta obsoleta, que tengo que cambiar el método por mysqli, eso me dice el error. Ayudame!

Este es el codigo:
Código: [Seleccionar]
// Wrapper para mysql_connect
//No encuentro ningún articulo que explique que es un wrapper, que alguien aporte //por fa
function conectar($host, $user, $pass, $db) {
 
    // Si no hay conexión fin del script
    if(!$link = mysql_connect ( $host, $user, $pass )) die(mysql_error());
    // Si no se puede seleccionar la db, fin del script
    if(!$dbase = mysql_select_db ( $db, $link )) die(mysql_error());
    return $link;
}
 
// Devuelve un elemento si se especifica $id o toda la tabla caso contrario
function select($link, $id = null) {
    // Tabla users
    $sql = "SELECT * FROM demo_users ";
        // Join con deptos, se hace siempre
    $sql .= "LEFT JOIN demo_depts on demo_depts.depid = demo_users.userdep";
    if ($id)
        $sql .= " WHERE  demo_users.userid = $id";
    if(!$query = mysql_query ( $sql, $link )) die(mysql_error());
    return $query;
}
 
// inserta id con values
function insert($link, $values) {
    // Inicio de la sentencia
    $sql = "INSERT INTO demo_users ( ";
    // Por cada par de clave, valor, concatenar al string sql
    // Primero las claves
    foreach ( $values as $property => $value ) {
 
        $sql .= $property . ",";
    }
    // Quito la ultima coma
    $sql = substr ( $sql, 0, - 1 );
    $sql .= ") VALUES (";
    // Ahora los valores
    foreach ( $values as $property => $value ) {
 
        $sql .= "'$value',";
    }
    $sql = substr ( $sql, 0, - 1 );
    $sql .= ");";
    // Insertar
    if(!$query = mysql_query ( $sql, $link )) die(mysql_error());
    return mysql_insert_id($link);
}
 
// actualiza id con values
function update($link, $id, $values) {
    $sql = "UPDATE demo_users SET ";
 
    foreach ( $values as $property => $value ) {
 
        $sql .= $property . " = '$value', ";
    }
    // Quito la ultima coma
    $sql = substr ( $sql, 0, - 2 ) . " WHERE userid = '$id';";
    if (!$query =  mysql_query ( $sql, $link )) die(mysql_error());
 
    return mysql_affected_rows($link);
}
 
// elimina id
function delete($link, $id) {
    $sql = "DELETE FROM demo_users WHERE userid = '$id';";
    if (!$query = mysql_query ( $sql, $link )) die(mysql_error());
    return true;
}
 
//select con los departamentos
function getDepSelect($link, $id = null)
{
    $sql = "SELECT * FROM demo_depts";
    if(!$query = mysql_query($sql, $link)) die(mysql_error());
    $output = "<select name='depid' id='depid'>";
    $output .= "<option value='-1' selected='selected'>Seleccione....</option>";
    while($deps = mysql_fetch_assoc($query))
    {
        //mostrar los registros, pero si hay un $id, entonces ese registro debe seleccionarse
        $output .= "<option ".($id && $id == $deps['depid']?'selected="selected"':'')." value='{$deps['depid']}'>{$deps['depname']}</option>";
 
    }
    $output .= "</select>";
    return $output;
}
// Un die un poco mas detallado
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: Alex Rodríguez en 03 de Abril 2016, 11:12
Hola Michel, en este curso tienes explicado ese problema y cómo solucionarlo, http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193

En concreto desde la entrega CU00839B hacia delante se explica todo lo relativo a conexiones y consultas a bases de datos

Saludos
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: __MICHEL__ en 05 de Abril 2016, 15:25
Muchisimas gracias Alex Rodríguez por dedicarme tu tiempo! Dejame buscar a ver, te respondo si solucione el problema. Saludos
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: __MICHEL__ en 05 de Abril 2016, 15:38
Alex, ya lo probe y me sigue dando error, mira lo que me sale:

Advertencia: mysqli_select_db () espera parámetro de 1 a ser mysqli, de cadena indicado en la linea 20.

Es q ese metodo esta medio raro, no se! Mira ver si me puedes ayudar
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: Lorenzo31 en 05 de Abril 2016, 20:20
Vale, con esto si puedo ayudarte, porque lo toco.

Debes usar mysqli->  es php orientado a objetos, debes sustituir todas las funciones por orientacion a objetos.

Ejemplo
       
Código: [Seleccionar]
// Si no hay conexión fin del script
    if(!$link = mysql_connect ( $host, $user, $pass )) die(mysql_error());
    // Si no se puede seleccionar la db, fin del script
    if(!$dbase = mysql_select_db ( $db, $link )) die(mysql_error());
    return $link;
}

Código: [Seleccionar]
$mysqli = new mysqli('localhost', 'Usuario', Password', 'BaseDeDatos');
if ($mysqli -> connect_errno) {
die( "Fallo la conexión a MySQL: (" . $mysqli -> mysqli_connect_errno()
. ") " . $mysqli -> mysqli_connect_error());
}


otra ayuda

    while($deps = mysql_fetch_assoc($query))

 seria
 
 while( $deps = $query->fetch_array(MYSQLI_ASSOC) )
De nada ;)
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: __MICHEL__ en 05 de Abril 2016, 22:11
Hola Lorenzo, muchas gracias por responderme, pero no me funciono lo que hiciste, el lio es que tengo otro php que llama a la función conectar, que cuando agrego lo que me hiciste, ya no funciona nada, me dice esto: Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\buscadorprobar\funciones.php on line 20

Sabes que puede ser?
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: Lorenzo31 en 06 de Abril 2016, 00:14
Si, si lo sé. Lo primero es que mysqli_select_db()  es una función, no orientada a objetos ysi la llamas, en un objeto, te dará error.

Segundo, ahí dice que espera un parámetro, cual? El nombre de la base de datos o la conexión previa.

Pero yo te he escrito una forma, orientada a objetos de conectar de una sola vez al servidor y elegir base de datos. Luego ya no necesitas el fichero de conexión que te está dando error sólo usa:
$mysqli = new mysqli('localhost', 'Usuario', Password', 'BaseDeDatos');
      if ($mysqli -> connect_errno) {
         die( "Fallo la conexión a MySQL: (" . $mysqli -> mysqli_connect_errno()
         . ") " . $mysqli -> mysqli_connect_error());
         }

Cambiando los nombres x los datos de tu servidor y base de datos.

Saludos.
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: __MICHEL__ en 07 de Abril 2016, 17:43
Lorenzo, muchas gracias por ayudarme, pero no funciona, ya intentare de buscar otro codigo o no se, ya eso me tiene estresado jajajajajajaja. Dale cuidate y gracias por dedicarme tu tiempo!

Saludos
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: Lorenzo31 en 09 de Abril 2016, 20:29
Juas, pega el código completo que quieres arreglar y yo te lo hago mañana, seguro que son cuatro comandos.
Saludos.
Título: Re:Deprecated: mysql_connect(): The mysql extension is deprecated and will be remov
Publicado por: Lorenzo31 en 10 de Abril 2016, 20:28
Bueno, como no lo has vuelto a escribir, te dejo el código inicial, orientado a objetos, no lo he compilado porque la base de datos la tienes tu, no yo.
Debes introducir los datos de la base de datos, donde te indico.

Si falla algo, serán problemas de simple sintaxis, si estás contento ya sabes, agradeceselo al foro y a sus administradores que no dejan de enseñar cosas (a mi muchas).

Saludos Michel.

Código: [Seleccionar]

<?php
// Wrapper para mysql_connect
//Un wrapper es un contenedor, en html5, sirve para poner dentro un trozo de código, generalmente una parte del body
function conectar($host$user$pass$db) { 
    
//aquí conectará a tu base de datos
    
$link = new mysqli('$host''$user''$pass''$db'); 
      if (
$link -> connect_errno) {
         die( 
"Fallo la conexión a MySQL: (" $link -> mysqli_connect_errno() 
         . 
") " $link -> mysqli_connect_error());
         }
 return $link;  
}
 
// Devuelve un elemento si se especifica $id o toda la tabla caso contrario
function select($link$id null) {
    
// Tabla users
    
$sql "SELECT * FROM demo_users ";
        
// Join con deptos, se hace siempre
    
$sql .= "LEFT JOIN demo_depts on demo_depts.depid = demo_users.userdep";
    if (
$id)
        
$sql .= " WHERE  demo_users.userid = $id";
    if(!
$query $link->query($sql)){ die(mysql_error()); }
    return 
$query;
}
 
// inserta id con values
function insert($link$values) {
    
// Inicio de la sentencia
    
$sql "INSERT INTO demo_users ( ";
    
// Por cada par de clave, valor, concatenar al string sql
    // Primero las claves
    
foreach ( $values as $property => $value ) {
 
        
$sql .= $property ",";
    }
    
// Quito la ultima coma
    
$sql substr $sql0, - );
    
$sql .= ") VALUES (";
    
// Ahora los valores
    
foreach ( $values as $property => $value ) {
 
        
$sql .= "'$value',";
    }
    
$sql substr $sql0, - );
    
$sql .= ");";
    
// Insertar
      
if(!$query $link->query($sql)){ die(mysql_error()); }
    return 
$link->insert_id;
}
 
// actualiza id con values
function update($link$id$values) {
    
$sql "UPDATE demo_users SET ";
 
    foreach ( 
$values as $property => $value ) {
 
        
$sql .= $property " = '$value', ";
    }
    
// Quito la ultima coma
    
$sql substr $sql0, - ) . " WHERE userid = '$id';";
    if(!
$query $link->query($sql)){ die(mysql_error()); }
 
    return 
$link->affected_rows;
}
 
// elimina id
function delete($link$id) {
    
$sql "DELETE FROM demo_users WHERE userid = '$id';";
   if(!
$query $link->query($sql)){ die(mysql_error()); }
    return 
true;
}
 
//select con los departamentos
function getDepSelect($link$id null)
{
    
$sql "SELECT * FROM demo_depts";
   if(!
$query $link->query($sql)){ die(mysql_error()); }
    
$output "<select name='depid' id='depid'>";
    
$output .= "<option value='-1' selected='selected'>Seleccione....</option>";
    while(
$deps $query->fetch_array(MYSQLI_ASSOC))
    {
        
//mostrar los registros, pero si hay un $id, entonces ese registro debe seleccionarse
        
$output .= "<option ".($id && $id == $deps['depid']?'selected="selected"':'')." value='{$deps['depid']}'>{$deps['depname']}</option>";
 
    }
    
$output .= "</select>";
    return 
$output;
}
?>