PHP认为我的非空DSN == null

时间:2016-12-29 19:40:44

标签: php mysql pdo

我第一次尝试在PHP中使用异常,但它并不是很顺利。

我有一个名为 dsn 的变量,它包含PDO / MySQL的连接字符串。

当我在 dsn 上使用var_dump时,它会返回'null',因此我可以假设我的 dsn 为空。

但是当我查看我的代码时,会检查DSN的值,当它等于NULL时,它应该抛出异常。

但是,PHP不会抛出异常。

我已经检查过拼写错误,但我的代码中不存在dns;)

由于这个原因,我也无法连接到我的数据库,因为我给PDO一个空的DSN字符串。

我的代码:

<?php
try {
    $host = 'localhost';
    $user   = 'root';
    $pass = '';
    $db = 'pridec';
    $charset = 'utf8';

    if ($host == NULL) {
        throw new Exception("Hostname is empty or is equal to null");
    }
    if ($user == NULL) {
        throw new Exception("Username is empty or is equal to null");
    }
    if ($db == NULL) {
        throw new Exception("Database is empty or is equal to null");
    }
    if ($charset == NULL) {
        throw new Exception("Charset is empty or is equal to null");
    }
    //Neither of these variables are working 
    //$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    //$dsn = "mysql:dbname=$db;host=$host;charset=$charset";
    $dsn = "mysql:dbname=$db";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];


    if ($dsn = NULL) {
        throw new Exception("DSN can *never* be empty or equal to null / zero");
    }

    try {
        $pdo = new PDO($dsn, $user, $pass, $opt);
    } catch (PDOException $pdoe) {
        echo "<pre>";
        var_dump($dsn);
        var_dump($pdoe);
        echo "</pre>";
        throw new Exception("Cannot connect to the database because: ".$pdoe->getMessage());
    }

    require "classes/account.class.php";
    $account = new account($pdo);
} catch (Exception $e) {
    echo "An error occured:<br>";
        echo $e->getMessage();
} finally {
    ini_set("session.hash_function","sha512");
    session_start();
}
?>

我希望你们能找到错误来帮助我。

1 个答案:

答案 0 :(得分:1)

if ($dsn = NULL) {
    throw new Exception("DSN can *never* be empty or equal to null / zero");
}

应该是

if ($dsn == NULL) {
    throw new Exception("DSN can *never* be empty or equal to null / zero");
}

你拥有的是&#34; =&#34;而不是&#34; ==&#34;