Para una correcta a la base de datos MySQL?

Thiluxan:

Estoy intentando conectar MySQL para mi programa PHP. La base de datos se ha conectado correctamente, ya que no muestra mensajes de error con la conexión de base de datos. Pero cuando estoy tratando de obtener los datos de la tabla, la salida no muestra ninguna salida. Se deja una pantalla en blanco. También se muestran los mensajes de error. Sólo se muestra 'Base de datos conectado correctamente'.

    <?php 
define('user', 'root');
define('pwd', '');

$dsn = "mysql:host=localhost:3307;db_name=mydatabase";
try{
    $db = new PDO($dsn,user,pwd);
    echo "Database connected successfully";
    $query = "SELECT * FROM student_detail";
    $statementss = $db->prepare($query);
    $statementss->execute();
    $detail = $statementss->fetchAll();
    foreach ($detail as $student) {
        echo $student['Name']." ";
        echo $student['Address']." ";
        echo $student['Age']." ";
        echo $student['Phone']." ";
        echo "<br>";
    }
    $statementss->closeCursor();

}
catch(Exception $e){
    echo $e->getMessage()."<br>";
}
?>
Drmn:

No está claro si en realidad tienen ningún valor en la base de datos, pero ahora voy a explicar cómo conectar correctamente a la base de datos MySQL con extensión PDO en PHP.

Hay 3 cosas que hay que hacer siempre al abrir la conexión DB:

  1. Habilitar el informe de errores. En DOP puede pasar $optionsmatriz que contiene \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTIONpara habilitar los informes de error.
  2. Ajuste el juego de caracteres correcto. El más común es utf8mb4. Si está utilizando utf8os recomiendo hacer el cambio tan pronto como sea posible.
  3. Crear una instancia de PDO.

Sólo se debe capturar las excepciones si se sabe por qué es necesario hacerlo. No envuelva todo en try-catch; esta es una idea terrible. En especial, no se te ocurra capturar las excepciones sólo para repetir el mensaje de error a cabo; Esto es inutil. Sin embargo, puede envolver la new PDO();línea de try-catch y luego lanzar una excepción personalizada en el catchbloque si usted es paranoico sobre la seguridad.

El nombre del par clave-valor para el nombre de base de datos está dbnameen lugar de db_name. Además, cuando se especifica el puerto, hay un par clave-valor separado en DSN dedicado a ello. Podría ser que el problema se debía a que estaba conectando en el puerto incorrecto o porque el db_nameno fue reconocido.

Su código fijo se vería así:

<?php

define('user', 'root');
define('pwd', '');

$dsn = "mysql:host=localhost;port=3307;dbname=mydatabase;charset=utf8mb4";
$db = new \PDO($dsn, user, pwd, [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_EMULATE_PREPARES => false,
]);

echo "Database connected successfully";

$query = "SELECT * FROM student_detail";
$statementss = $db->prepare($query);
$statementss->execute();
$detail = $statementss->fetchAll();

foreach ($detail as $student) {
    echo $student['Name']." ";
    echo $student['Address']." ";
    echo $student['Age']." ";
    echo $student['Phone']." ";
    echo "<br>";
}

cuestiones no relacionadas:

  1. Es probable que no necesite closeCursor(). No estoy seguro de lo que la idea de que era en su ejemplo.
  2. Siempre es buena idea separar la lógica de la base de datos de código HTML. Use clases o funciones para encapsular las operaciones de base de datos y luego tener el foreachbucle en HTML.
  3. La convención para nombrar constantes en PHP es que deben estar escritos en mayúsculas, por lo que es más fácil distinguirlos.
  4. Se recomienda apagar declaraciones preparadas emulados. Puede agregar \PDO::ATTR_EMULATE_PREPARES => falsea la $optionsmatriz.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=299102&siteId=1
Recomendado
Clasificación