Uncaught exception 'PDOException' message 'invalid data source name'

33,434

Gotcha.

For some reason you are extending your class from PDO. So, your 'blogdata' is taken as a DSN.

Just get rid of your DB class and use raw PDO

connect.inc.php:

<?php 
$db_host = "localhost";
$db_name = "blogdata";
$db_user = "username";
$db_pass = "password";
$db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

index.php:

<?php
require 'connect.inc.php'; 

$query = "SELECT * FROM blogposts";
$result = $db->query($query);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
Share:
33,434
Lisa
Author by

Lisa

Updated on January 21, 2020

Comments

  • Lisa
    Lisa over 4 years

    I´m trying to connect to my database with PDO and show some blogposts on a page. However I´m getting this error message:

    Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in index.php on line 61...

    I´ve been searching for help but really can´t figure out what is wrong so if anyone have any idea it is much appreciated!

    I have a separate connect.inc.php file which is included in the index.php file.

    This is the connect.inc.php file:

    <?php
    class DB extends PDO
    {
    function database_connection() {
       $db_host = "localhost";
       $db_name = "blogdata";
       $db_user = "username";
       $db_pass = "password";
       try {
       global $db_host, $db_name, $db_user, $db_pass;
       $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
       }
       catch(PDOException $e) {
       die( 'Query failed: ' . $e->getMessage() );
    }
    }
    }
    ?>
    

    And this is the section in the index.php file which is pointed out in the error message:

    <?php
        require 'connect.inc.php';  
        $db = new DB('blogdata');
    
        $query = "SELECT * FROM blogposts";
        if ($result = $db->query($query)) {
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            echo ' 
                <section id="content">
                <article class="post_title"><h3> ', $row['title'],' </h3></article>
                <article class="post_message"> ', nl2br ($row['message']),' </article>
                <article class="post_time"> ',$row['time'],' </article>
                </section>
                ';
            }
        } ;
        ?>
    
  • Lisa
    Lisa over 10 years
    Thank you! Finally! That solved the problem! However I see what you mean with your above comment. I´ve been fizzling with my connection code for some time and I had a better consistent code first which I messed up when not knowing exactly what I´m doing:/ Is it better to wrap the connection up in a function than using raw PDO?
  • Your Common Sense
    Your Common Sense over 10 years
    Only if you know what are you doing. As a matter of fact, PDO is already such a connection handling class. It has almost everything an average user needs. So, it's better to keep with raw PDO.
  • tanjiya
    tanjiya over 2 years
    @YourCommonSense, I did as suggested. But, It's not getting things from connect.inc.php file. As for example: I have created 2function at index.php inside a class. One function is for insertion, another one is for selection. Insertion works fine. But, selection is not able to fetch the connection. So you have any suggestion regarding this?