• Resuelto Daref

    (@daref)


    Buenas, estoy migrando mi web desde un hosting que usaba la versión de PHP 5.3.X y el nuevo hosting me permite a partir de la PHP 5.5.38 aunque tiene como predeterminada la PHP 5.6.31.

    Por lo tanto estoy probando con la primera de las consultas que se ejecuta en mi web:

    Antes era (mysql):

    global $current_user;
          get_currentuserinfo();
    $ID = $current_user->ID ;
    
    $correo= mysql_query("SELECT * FROM wp_mdc_private_message WHERE receiver = '".$ID."' ");
    $mensajes = 0;
    	while($row = mysql_fetch_array($correo)){
    	if ($row['is_read'] == 0 && $row['is_trash_rcvr'] == 0){
    			$mensajes = $mensajes + 1;
    	}	
    	}

    Ahora estoy probando con (mysqli):

    global $wpdb, $current_user;
          get_currentuserinfo();
    $ID = $current_user->ID ;
    
    $sqlCommand = $wpdb->prepare("SELECT * FROM wp_mdc_private_message WHERE receiver = %d", $ID);
    $correo = mysqli_query($wpdb->connection, $sqlCommand); 
    	$mensajes = 0;
    	  while($row = mysqli_fetch_array($correo)){
    	
    		if ($row['is_read'] == 0 && $row['is_trash_rcvr'] == 0){
    			$mensajes = $mensajes + 1;
    		}	
    	  }

    Pero la segunda consulta me reporta los siguientes errores:

    Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/hogwart4/public_html/wp-content/themes/Irene/header.php on line 38
    
    Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /home/hogwart4/public_html/wp-content/themes/Irene/header.php on line 40

    ¿Cómo debo tratar la conexión con WordPress? Yo entiendo que con $wpdb accedemos a la conexión con el fichero de la configuración de WordPress.

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Hola:

    Dos cosas:

    1. Entiendo que WP por defecto usa mysqli para las conexiones. Se puede ver en el archivo wp-db.php asi que puedes usar las funciones que te da wp para realizar consultas

    2. Por otro lado si lo que quieres es tu misma realizar las consultas a la bbdd tendras que pasarle como bien dice la documentación de php el objeto conexion a la funcion. El objeto conexion entiendo yo que es la variable global $wpdb.

    Espero que te sirva.

    Un saludo.

    • Esta respuesta fue modificada hace 6 años, 8 meses por vainas.

    Buenas de nuevo:

    Me contesto a mi mismo por que hay un error en el punto 2. Es cierto como digo en el punto 1 que WP tiene el objeto $wpdb para todo lo referente a las conexiones a la bbdd y que por defecto usa mysqli (siempre y cuando la versión de WP sea superior a la 5.5 y no se defina la variable WP_USE_EXT_MYSQL a true).

    Por el otro lado mirando un poco wp-db.php veo que tienes una variable a la que entiendo que se puede acceder que se llama $dbh que es el manejador de la conexion a la bbdd. Entiendo que deberias probar con:

    mysqli_query($wpdb->dbh, $sqlCommand);

    De todas formas te recomiendo que mejor hagas uso de las funciones de WP

    $wpdb->get_results($sqlCommand, OBJECT);

    Saludos.

    • Esta respuesta fue modificada hace 6 años, 8 meses por vainas.
    Iniciador del debate Daref

    (@daref)

    Buenas vainas,

    Estoy probando y si me funciona con el ->dbh aunque en algunas consultas me responde null, aún tengo muchas que cambiar. Pero me fue de gran utilidad porque es lo que andaba buscando. Aunque cuando hay una segunda consulta me da error ¿Habría alguna forma de remediarlo?

    Por otro lado no uso las funciones de WP porque no las comprendo por ejemplo ¿Que es OBJECT?¿Cómo tengo que tratar después los datos? Y así muchas preguntas más que tendría que aprender a programar de cero y cambiar todos los includes que tienen interacción con la base de datos.

    un saludo.

    • Esta respuesta fue modificada hace 6 años, 8 meses por Daref.
    Iniciador del debate Daref

    (@daref)

    Retiro lo de la segunda consulta del segundo párrafo.

    Buenas de nuevo:

    Si te responde null hay que ver que ha fallado en la consulta.

    Te recomiendo que mires como se puede depurar WP aqui.

    OBJECT es lo que te va a regresar la consulta, si miras la documentación en el apartado que te paso pone output_type y luego abajo te dice de que tipo son los valores que se regresan si le pasas uno u otro. Yo lo que suelo hacer es hacer un print_r($result); para ver como vienen todos los datos (No suele ser una opción hacerlo asi pero si estas empezando pues suele ser lo mejor para entender lo que se esta regresando).

    No te desanimes si tienes que aprender tienes que aprender.

    Saludos.

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • El debate ‘Cambio de mysql_query a mysqli_query’ está cerrado a nuevas respuestas.