今天在调试一个扫雷的源码的时候,运行一下提示“SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”这个意思;这个意思好像是PDO出现的问题,我的具体是因为数据库链接的问题,这很尴尬,不过呢,依然我把找到的相关答案一并写进文章里;
MySql ERROR 1046(3D000): No Database Selected
No DataBase Selected 翻译->意思是说没有选种数据库.
首先要建立数据库,在将表放入数据库中;都知道是没有选择数据库,就是没有回答到正题上,此刻贴出解决方法:
如果已经创建数据库那么就先执行以下‘use dbname’ 即可,没有创建可先创建数据库
贴下我的全部代码:
$serverName = 'localhost';
$userName= '';
$password = '';
$dbName = '';
try {
$dsn = 'mysql:host = $serverName;dbname = $dbName';
$conn = new PDO($dsn,$userName,$password); //初始化连接
//如果没有数据库创建数据库
$cql = "CREATE DATABASE if not exists $dbName";
$conn->exec($cql);
//添加使用数据库
$str = "use $dbName";
$conn->exec($str);
echo '数据库连接成功'.PHP_EOL;
// 设置异常模式
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//编写sql 语句
$sql = "CREATE TABLE if not EXISTS MyGuests(id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP )";
$conn->exec($sql);
echo "建表成功".PHP_EOL;
} catch (PDOException $e) {
echo $e->getMessage();
}
$conn = null;
PS:删除账户的时候也会出现此问题,具体的解决办法一并给出;
使用以下命令行删除账户:
delete from user where user='账户名';
出现:
ERROR 1046 (3D000): No database selected
因为是直接使用 SQL 语句的方式来删除账户,所以必须先选择 mysql 自身的数据库:
use mysql;
下面是一组测试数据的实例;
测试用PDO方式进行预处理语句插入数据,发现选定了数据库名,但是不生效的BUG(无效的数据库名),原来是前后有关系,在设定$dsn时,一定要把dbname=XXX放在第一个参数,即紧挨着$dsn = "mysql:正确写法:$dsn = "mysql:dbname=echarts;host=localhost;port:3306;charset=utf8";
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!(有事儿请详询博主:博主电话以及微信18810292089)