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();
}
问题未解决?付费解决问题加Q或微信 2589053300 (即Q号又微信号)右上方扫一扫可加博主微信
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!
赏
支付宝赞助
微信赞助
免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。
您必须遵守我们的协议,如您下载该资源,行为将被视为对《免责声明》全部内容的认可->联系老梁投诉资源 LaoLiang.Net部分资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。
敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:service@laoliang.net
意在交流学习,欢迎赞赏评论,如有谬误,请联系指正;转载请注明出处: » MySQL数据库用PDO建表或者运行时报错为 “SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”的解决办法