Using $dsn string variable as parameter in database PDO

柔情痞子 提交于 2019-12-13 06:02:02

问题


Goal: to simply fetch array from a MySQL database.

Issue: I am using the $dsn "string variable" as a parameter in the PDO Statement but there appears to be an uncaught exception and it has something to do with invoking the driver or the (PDO->__construct) -- I am not sure. Do you have any ideas on how to fix the $dsn string variable or other areas of this code that would cause it to fail? Thanks in advance.

// Define Database Parameters

    $dbhost = "localhost";
    $dbname = "x";
    $dbuser = "y";
    $dbpass = "z";

// Invoke Driver (as a variable string)

    $dsn = "mysql:host=$dbhost;dbname=$dbname";

// Connect to newly created db object

    $dbh = new PDO($dsn, $dbuser, $dbpass);

// Set the PDO error mode to enable exceptions

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

// Execute query to the database

    $sql = "SELECT * FROM a_aif_remaining";
    $sth = $dbh->prepare($sql);
    $sth->execute();

// Present results from query

    print("PDO::FETCH_ASSOC: ");
    print("Return next row as an array indexed by column name");
    $result = $sth->fetch(PDO::FETCH_ASSOC);
    print_r($result);
    print("");
    return $results;

// Close db connection

    $dbh = NULL;

    ?>

回答1:


Put your code in a try catch block. And see the error message reported. An example of this below:

try
{
  if ( !class_exists( 'PDO' ) )
    throw new Exception( 'PHP without PDO' );
  if ( array_search( PDO::getAvailableDrivers(), 'mysql' ) === false )
    throw new Exception( 'PHP without PDO mysql driver' );
  $dbh = new PDO( ... );
  ...
}
catch ( PDOException $e )
{
  print $e->getMessage();
}
catch ( Exception $e )
{
  print $e->getMessage();
}



回答2:


There can't be any problem where you're looking for it. Substituting a string with a variable is okay and cannot cause any issues. So, it is somewhere else. Luckily PHP reported of it, but strangely, you paid not much attention to that report.

there appears to be an uncaught exception

Uncaught exceptions often contains the error message.
Most of PHP error messages are quite informative. One have to read them through to get the explanation of the problem. After all, it's the only your source of information. No one can tell you what is wrong on your server but server itself. If you have difficulties with interpreting the error message - it is essential to post it along with your question, to let people interpret it for you. So, every error message you get, should be posted in your question, whole and intact. Simple but very important rule.



来源:https://stackoverflow.com/questions/14063932/using-dsn-string-variable-as-parameter-in-database-pdo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!