<?php
function DBconn() {
if(!$conn = mysqli_connect("localhost","root","root","root")) {
throw new Exception("Database connect error!");
}
}try {
DBconn();
} catch(Exception $e) {
echo $e->getMessage();
}
?>按道理来讲,输出结果应该是Database connect error!
可是我一运行,输出结果如下:
Warning: mysqli_connect() [function.mysqli-connect]: (28000/1045): 'root'@'localhost' 荤侩磊绰 立辟捞 芭何 登菌嚼聪促. (using password: 抗) in E:\php\test\try.php on line 3
Database connect error!
暂且不管乱码是什么意思,反正是无法连接数据库的意思,但是跟我要的结果不一样,按理来说mysqli_connect错误不该出现,我的PHP版本是5.2.8 请问哪里有错误,该怎么正确使用throw,try,catch函数。

解决方案 »

  1.   

    是你使用的 mysqli_connect() 函数参数有问题,服务器会显示一个 WARNING 级别的错误信息,如果你不想显示服务器提示的错误信息,你就加上@屏蔽它,就会达到你的如其效果。我们一般都会用 @ 在产品正式运行时候屏蔽一些系统提示的信息以避免一些别有用心的人带来的小麻烦。
      

  2.   

    楼主为什么不用die()呢?
    [code=PHP]
    <?php 
    $conn = @mysqli_connect("localhost","root","root","root") die("Database connect error!"); //当$conn出错的时候就会提示Database connect error!
      

  3.   

    链接数据库的函数都写错了,你留错误留里面的错误参数就行了吧
    $conn = mysql_connect 
      

  4.   


    孤陋寡闻了吧,mysqli是php5新添的扩展!
      

  5.   

    我来解释一下.exception和 php原有的error_reporting是两套错误系统, 
    你如果要error_reporting的信息不显示, 在前面加 error_report(0) 或者用
    function exception_error_handler($errno, $errstr, $errfile, $errline ) {
        throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
    set_error_handler("exception_error_handler");
    把错误转换成exception,这样就能catch到了
    例子一:
    <?phpfunction exception_error_handler($errno, $errstr, $errfile, $errline ) {
        throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
    set_error_handler("exception_error_handler");try { 
        $conn = mysqli_connect("localhost","root","root","root"); 
    } catch(Exception $e) { 
        echo 'Database connect error:'.$e->getMessage(); 
    } ?>例子二: (这个例子里捕捉了php自己报的ErrorException,忽略掉后,换成自己定义的MyException)<?php
    function exception_error_handler($errno, $errstr, $errfile, $errline ) {
        throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
    set_error_handler("exception_error_handler");class MyException extends Exception{
    public function show(){
    echo 'My exception:';
    }
    }function DBconn() {
    try{ 
    $conn = mysqli_connect("localhost","root","root","root"); 
    }catch(ErrorException $e){
    throw new MyException("Database connect error!");

    } try{ 
    DBconn(); 
    } catch(Exception $e) { 
    $e->show(); 
    echo $e->getMessage();
    } ?>
      

  6.   

    你检查下帐号或密码是否正确。mysqli_connect("localhost","root","root","root")
    红色部分应该是端口吧,你写个root是啥意思?
    你把if的{}里面换成下面看看//throw new Exception("Database connect error!");
    die("Can't connect to localhost. <br />\n " . 
        "ErrorCode: " . mysqli_connect_errno() . "<br />\n" . 
        "Error: " .     mysqli_connect_error() );
      

  7.   

    如果用@来隐藏错误信息,我就不使用try,catch了,直接用or die来判断就可以了,我想要知道try的功效
      

  8.   

    我故意写错的,就是想体验try,catch,throw的用法