douchen9569 2016-12-29 19:40
浏览 37
已采纳

PHP认为我的非空DSN == null

I try to play with exceptions in PHP for my first time, but it does not go very well.

I have a variable named dsn, this contains the connection string of PDO / MySQL.

When I use var_dump on dsn it returns 'null', so i can assume that my dsn is empty.

But when I look in my code, the value of DSN is checked and when it equals to NULL it should throw an exception.

But, PHP does not throw an exception.

I already have checked for a typo, but dns does not exist in my code ;)

And due to this, I also can't connect to my database because I give PDO an empty DSN-string.

My code:

<?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();
}
?>

I hope you guys can find the error to help me.

  • 写回答

1条回答 默认 最新

  • doulue1949 2016-12-29 20:24
    关注
    if ($dsn = NULL) {
        throw new Exception("DSN can *never* be empty or equal to null / zero");
    }
    

    should be

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

    what you have is "=" instead of "=="

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?