我很想检查我是否可以使用给定的用户名,密码和数据库主机连接到数据库。
到目前为止我一直在努力:
$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~~
答案 0 :(得分: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
顺便说一下,您应该考虑使用mysqli
或PDO
,因为mysql_*
函数已被弃用。
答案 1 :(得分:1)
尝试使用类似
的方式调试连接$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link){
die('Could not connect: ' . mysql_error());
}
通过这种方式,您可以轻松检查连接是否已建立,否则您将打印错误。
答案 2 :(得分: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)
,结果相同。
答案 3 :(得分: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());
}