WAMPServer中MySQL出现“Unknown database 'database_name'”错误

3
我已经有一个名为als的数据库,但我仍然遇到了错误。
<?php

$mysql_host='localhost';
$mysql_user='root';
$mysql_password='';
$mysql_db='als';
$con = @mysql_connect($mysql_host,$mysql_user,$mysql_password) or             die(mysql_error());
@mysql_select_db($mysql_db) or die(mysql_error());

?>

3
mysql_*扩展已被弃用,建议选择其他API连接到MySQL服务器。请参考http://docs.php.net/mysqlinfo.api.choosing。 - VolkerK
2
移除 @ 并发布您的错误。 - Dave Chen
@VolkerK 我将这段代码用于其他电脑上,它也能正常工作。 - Melvin Jay Belenario
2
@MelvinJayBelenario 是的,你需要使用PDO或MySQLi。 - Dave Chen
2
并没有说切换到mysqli或PDO会解决那个特定的问题。mysql_*仍然已经被弃用 - 即使您的php版本也是如此。既然看起来您没有大量的遗留代码,而是开始了您的旅程:现在是时候切换并使用一个正在积极开发和支持的API了。 - VolkerK
显示剩余2条评论
2个回答

2

虽然不是对你问题的直接回答,但是过长不能作为评论:
在建立数据库连接后,您可以通过SHOW DATABASES查询已有的数据库。

<?php
$mysqli = new mysqli('localhost', 'root', '');
if ($mysqli->connect_errno) {
    trigger_error('query failed: '.$mysqli->connect_error, E_USER_ERROR);
}

$result = $mysqli->query('SHOW databases')
    or trigger_error('connect failed: '.join(',', $mysqli->error_list), E_USER_ERROR);

foreach( $result as $row ) {
    echo join(', ', $row), "<br />\r\n";
}

你的数据库als显示出来了吗?
因为你使用的是默认的root账户(密码为空;你可能还需要检查一下),所以不应该有任何权限相关的问题。如果数据库没有显示出来,那就是不存在...

使用PDO(我最喜欢的工具)而不是mysqli的(几乎)相同脚本:

<?php
$pdo = new PDO('mysql:host=localhost;charset=utf8', 'root', '', array(
    PDO::MYSQL_ATTR_DIRECT_QUERY => false,
    PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));

foreach( $pdo->query('SHOW DATABASES', PDO::FETCH_NUM) as $row ) {
    echo $row[0], "<br />\r\n";
}

1
我的数据库也没有出现。 - Melvin Jay Belenario
1
那么,如果数据库没有显示出来,那就意味着它不存在了……这意味着 我已经命名我的数据库名为als 出现了问题;-) - VolkerK
1
我会尝试重新安装/配置MySQL。顺便说一句,谢谢您,先生。 :) - Melvin Jay Belenario

0

好的,mysql_系列函数已经被弃用了一段时间,请改用mysqli_库。另一台机器可能可以工作,因为它使用的是一个旧版本的PHP,在该版本中它尚未被弃用或全局警告已被抑制。

MySQLI Connect

在实际应用中

$mysql_host='localhost';
$mysql_user='root';
$mysql_password='';
$mysql_db='als';
$con= mysqli_connect($mysql_host,$mysql_user,$mysql_password, $mysql_db) or die("Error " . mysqli_error($con));

不再需要任意选择数据库。现在可以将$con用作mysqli_过程性函数的参数。

最后,但并非最不重要的是,永远不要使用@符号进行调试。这会压制它之前的函数产生的错误警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接