-1

我很想检查我是否可以使用给定的用户名、密码和数据库主机连接到数据库。

到目前为止,我正在尝试:

$conn = mysql_connect($dbhost, $dbuser, $dbpass);
$conndatabase = mysql_select_db($dbname);

if(!mysql_ping($conn) || !$conndatabase){ 
    //do something when cant connect 
} else { 
    //do something when you connected
}

当我给出错误时它可以工作$dbname,因为它无法选择这个数据库。但是当我输入错误的主机、用户名或密码时,它会给我一个带有错误的白页。例如:

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'rootx'@'localhost' (using password: YES) in C:\xampp\htdocs\strony\planer\config\opendb.php on line 6
Warning: mysql_ping() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\strony\planer\grupy.php on line 3

问题:
有没有办法检查我是否可以使用给定的数据进行连接而不会出错?它只是在到达之前给出错误mysql_ping()

编辑
在尝试了 Mike Brant 解决方案之后,我想我可能解释错了。我正在尝试连接到数据库,如果它允许我,它会显示他想要访问的用户页面,但是当它不可能时,它会将他重定向到另一个页面,以修改数据库信息。

if(!$conndatabase){
    header('Location: index.php');
}

我用它来检查数据库是否存在。但是如果我尝试if(!$conn)或类似的东西,为时已晚,因为我在$conn = mysql_connect($dbhost, $dbuser, $dbpass). 所以我不能重定向,因为它给了我

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost'~~
Warning: Cannot modify header information - headers already sent by~~
4

4 回答 4

2

是的。只需测试 的值$conn。如果是,false则连接失败,您甚至不应该尝试继续进行数据库选择步骤。

您的代码可能如下所示:

$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if (false === $conn) {
    throw new Exception('Could not connect to database: ' . mysql_error());
}
$db_select = mysql_select_db($dbname. $conn);
if (false === $db_select) {
    throw new Exception('Could not select database: ' . mysql_error($conn));
}

PHP文档对此非常清楚:http: //php.net/manual/en/function.mysql-connect.php

顺便说一句,你应该看看 usingmysqliPDOasmysql_*函数已被弃用。

于 2013-04-29T21:46:44.223 回答
1

当您查看我有问题的编辑时,您会发现这些答案并没有完全解决我的问题。我仍然缺乏一些避免错误的方法。那是我用的地方error_reporting(0);。我不确定这是否是最好的解决方案,但它对我来说就像一种魅力。所以我试图实现的所有代码看起来像这样:

opendb.php 文件

<?php
   $dbhost = 'localhost';
   $dbuser = 'root';
   $dbpass = 'password123';
   $dbname = 'databasename';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   $conndatabase = mysql_select_db($dbname);
?>

在网站上我正在检查连接:

<?php
   error_reporting(0);
   include 'opendb.php';
   if(!mysql_ping($conn) || !$conndatabase){
        header('Location: index.php'); //or any other site where you can config your database connection information.
   }

所以,是的,这完全解决了我的问题。我想我可以使用!$conn而不是!mysql_ping($conn)相同的结果。

于 2013-05-02T11:37:44.693 回答
1

尝试使用类似的东西调试您的连接

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if(!$link){
die('Could not connect: ' . mysql_error());
}

通过这种方式,您可以轻松检查连接是否已建立,否则您将打印错误。

然后我想记住您mysql_不推荐使用功能,因此我建议您切换到mysqliPDO

于 2013-04-29T21:47:07.943 回答
0

如前所述,它是mysql_connect函数的 PHP 手册页上的第一个示例。

其次,您应该使用mysqli_函数或PDO,因为这些mysql_函数已被弃用并且目前正在逐步淘汰。

检查与 PDO 的连接:

try {
    $db = new PDO('mysql:host=127.0.0.1;dbname=dbname', 'user', 'pass');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    header('HTTP/1.1 500 Internal Server Error');
    die($e->getMessage());
}
于 2013-04-29T21:51:26.300 回答