2016-11-21 138 views
-1

是的,这已经被问过。其他答案没有帮助。mysql:使用php,mysqli_connect()失败时如何捕获错误?

我是mysql和php的新手。 我正在参加大学课程,在我面前有一个html-php-mysql项目。

我一直在编码30年,并使用关系数据库20年。所以我有一些经验。是的,这是作业,但我已经写了一些不起作用的简单代码。

我觉得核心问题是班级没有教科书,我们被指示“在网上找到你需要的所有帮助”。 由于有很多方法可以使用php皮肤猫,找到与我的教师相匹配的示例一直是一个挑战。查找不推荐的mysql_ *示例会使搜索更加困难。大多数代码示例假设查询将始终有效!和db连接。这是最后一点。我的PHP处理所有其他错误,我可以扔在它。

这段代码是frankenstein,但我没有得到这个工作。忍受我和代码。

毫无疑问,制作此生产代码需要做很多事情,但这不是目标。我想获得玩具html文件和php脚本连接到一个玩具mysql数据库,并产生一个近乎平凡的结果。所有这些考虑都不是密切相关的。

我强制连接失败,所以我的代码可以优雅地告诉用户系统已关闭,并且我可以记录该错误。

由于“rootx”无效导致php错误。

"PHP Warning: mysqli_connect(): (HY000/1045): Access denied for user 'rootx'@'localhost'" 

但是错误没有被捕获,“catch”被跳过并且“finally”子句运行。

mysqli_report(MYSQLI_REPORT_STRICT); 

被添加,因为这条线修复了这个相同的问题。它没有帮助。

可能是如何配置wamp?我所做的只是在安装程序的指导下安装在这个Windows 10机器上。

mysqli_report(MYSQLI_REPORT_STRICT); 
try { 
    $conn = mysqli_connect('localhost', 'rootx', '', 'csc443'); 
          // server,  username, pw, dbname 
    } 
} catch(Exception $e) { 
    log_action("dbconnectfail " . $username . " | " . $e->getCode() . " | " . $e->getMessage()); 
    header('Location: 500.php'); 
    return;  
} finally { 
    log_action("dbconnect localhost::csc443"); 
} 
+0

发生错误时连接将返回false。检查值是否为假 –

+0

我强制连接失败。我希望连接失败,以便测试检测登录失败的代码。 我的问题是编写可以优雅地处理这个错误的代码。 我以为try-catch-finally是一个不错的选择,因为mysql会抛出一个记录错误! –

回答

0

删除所有try,catch和finally子句。使用下面的代码来确定问题的联系。

$conn = mysqli_connect('<server>', '<username>', '<password>', '<database-name>'); 
if (!$conn) { 
    // whatever processing you want to do upon error in connection 
    // like log error or send an email to admin 
    // I am just printing the error at the moment. 
    echo mysqli_connect_errno() . ":" . mysqli_connect_error(); 
    exit; 
} 

Official documentation摘录。

+0

我强制连接失败。我希望连接失败,以便测试检测登录失败的代码。 我的问题是编写可以优雅地处理这个错误的代码。 我以为try-catch-finally是一个不错的选择,因为mysql会抛出一个记录错误! –

+0

哦.......你确定连接证书不正确吗? –

+0

正如我上面所说,在我原来的问题,我强迫连接失败我可以测试一些代码。 –

相关问题