2

Actualización ...
Tengo la siguiente tabla :

CREATE TABLE `chrislat_cms`.`opciones` (
`id` INT(11) NOT NULL AUTO_INCREMENT ,
`nombreOpcion` VARCHAR(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL ,
`valorOpcion` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE = MyISAM CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci;

Con los siguientes datos :

| id | nombreOpcion | valorOpcion |
|----|--------------|-------------|
| 1  | nombre_sitio |  cms-CLT  |
| 1  | descripcion  |  es una descripción ña |

Nota : La codificación en la base de datos tambien es utf8mb4_unicode_ci

Al consultarla de la siguiente manera :

// Esta variable es la conexión al servidor $cCms
$consulta = "select valorOpcion from opciones where nombreOpcion='$nombre'";
$hacerConsulta = mysqli_query($cCms, $consulta) or die(mysqli_error($cCms));
if($hacerConsulta){
    if(mysqli_num_rows($hacerConsulta)==1){
        $fila = mysqli_fetch_array($hacerConsulta);
        $valor = $fila['valorOpcion'];
    }else if(mysqli_num_rows($hacerConsulta)>1){
        $valor = "Error al obtener datos de $nombre [+1]";
    }else{
        $valor = "Error al obtener datos de $nombre [0]";
    }
}else{
    $valor = "Error al obtener datos de $nombre [-1]";
}

echo $valor;

Obtengo lo siguiente :

cms-CLT ?
es una descripci�n �a

Pero cuando las consulto directo en phpMyAdmin se ven correctamente

¿Se me esta escapando algo, consulta mal? No obtengo ningún error aparente Detalles de wamp server

  • Servidor de base de datos
  • Windows 10 pro x64
  • Servidor: MySQL (127.0.0.1 via TCP/IP)
  • Tipo de servidor: MySQL
  • Versión del servidor ( Versión de MySQL): 5.7.21 - MySQL Community Server (GPL)
  • Versión del protocolo: 10
  • Usuario: root@localhost
  • Conjunto de caracteres del servidor: UTF-8 Unicode (utf8)
  • Servidor web
  • Apache/2.4.33 (Win64) PHP/7.1.16
  • Versión del cliente de base de datos: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
  • extensión PHP: mysqliDocumentación curlDocumentación mbstringDocumentación
  • Versión de PHP: 7.1.16

2 Answers2

1

Te dejo la solución a tu pregunta, pero hecho con PDOen vez de mysqli con una muestra de la página funcionando

página index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<?php

$conexion = new PDO("mysql:host=localhost;port=3307;dbname=demo;charset=utf8mb4", "root", "khe");

$consulta = $conexion->prepare("select * from msg");
$consulta->execute();
$resultado = $consulta->fetchAll();


foreach ($resultado as $row) {
            echo $row["message"];
        }
?>
</body>
</html>

Para el caso de la base de datos una vez que declaraste la tabla que contendrá los emojis, ejecuta el siguiente comando

SET NAMES utf8mb4;

Para el caso de la tabla, vamos a establecer el juego de caracteres de la siguiente manera

ALTER TABLE msg CONVERT TO CHARACTER SET utf8mb4;

En la conexión como puedes notar también declaro el juego de caracteres utf8mb4

La siguiente imagen muestra el resultado final en la página web

introducir la descripción de la imagen aquí

1

Dado que el complañero contesto con un ejemplo en PDO cuando utilizas MySQLi, dejare esta respuesta con un ejemplo en MySQLi.

Lo primero como puedes ver en esta respuesta de A. Cedano, es revisar que todo este acorde con la codificación deseada, documento generado(html, js, css...), servidor web, conexiones servidor base de datos, base de datos, tablas, columnas... Resumiendo, todas las partes implicadas deberían estar en la misma codificación.

En fin, veamos un ejemplo:

// Establecer codificación en las cabeceras enviadas para la petición http
header('Content-Type: text/html; charset=UTF-8');

// Conexión
$cCms= new mysqli("localhost", "mi_usuario", "mi_contraseña", "test");

// Estabecer codificación para la conexión
if (!$cCms->set_charset("utf8mb4")) {
    printf("Error cargando el conjunto de caracteres utf8: %s\n", $cCms->error);
    exit;
} 

$consulta = "select valorOpcion from opciones where nombreOpcion='$nombre'";
$hacerConsulta = mysqli_query($cCms, $consulta) or die(mysqli_error($cCms));
if($hacerConsulta){
    if(mysqli_num_rows($hacerConsulta)==1){
        $fila = mysqli_fetch_array($hacerConsulta);
        $valor = $fila['valorOpcion'];
    }else if(mysqli_num_rows($hacerConsulta)>1){
        $valor = "Error al obtener datos de $nombre [+1]";
    }else{
        $valor = "Error al obtener datos de $nombre [0]";
    }
}else{
    $valor = "Error al obtener datos de $nombre [-1]";
}

echo $valor;
Xerif
  • 7,283
  • 3
  • 17
  • 41