MySQL数据库用PDO建表或者运行时报错为 “SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”的解决办法

今天在调试一个扫雷的源码的时候,运行一下提示“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";

<?php
    try {
        $dsn = "mysql:dbname=echarts;host=localhost;port:3306;charset=utf8";
        $username = "root";
        $password = "root";
        
        $attr = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
            
        $pdo = new PDO($dsn,$username,$password,$attr);
        var_dump($pdo);
        $sql = 'insert into prirule(id,info) values(:id,:info)';
        $stmt = $pdo->prepare($sql);
        $data = [
            ':id'   => 10,
            ':info' => '大象'
        ];
        $stmt->execute($data);
        $rows = $stmt->rowCount();//返回受上一个 SQL 语句影响的行数

        if ($rows) {
            exit('添加成功');
        }else{
            exit('添加失败');
        }
        
    } catch (PDOException $e) {
        echo $e->getMessage();
    }

所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!

更多请关注:老梁`s Blog

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。 您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可->联系老梁投诉资源
Laoliang.Net资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:service@laoliang.net
老梁`s Blog(老梁博客) » MySQL数据库用PDO建表或者运行时报错为 “SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”的解决办法

发表评论

本站承接,网站推广(SEM,SEO),软件的安装的安装与调试,服务器的推荐以及配置,APP的开发与维护,网络或者web维护;财务软件,客户管理系统,人力资源,超市POS,医药管理,服务器安全,ecshop,金蝶,用友,管家婆;

立即查看 了解详情