MySQL數(shù)據(jù)庫用PDO建表或者運行時報錯為 “SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”的解決辦法
[重要通告]如您遇疑難雜癥,本站支持知識付費業(yè)務,掃右邊二維碼加博主微信,可節(jié)省您寶貴時間哦!
今天在調試一個掃雷的源碼的時候,運行一下提示“SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”這個意思;這個意思好像是PDO出現(xiàn)的問題,我的具體是因為數(shù)據(jù)庫鏈接的問題,這很尷尬,不過呢,依然我把找到的相關答案一并寫進文章里;
MySql ERROR 1046(3D000): No Database Selected
如果已經(jīng)創(chuàng)建數(shù)據(jù)庫那么就先執(zhí)行以下‘use dbname’ 即可,沒有創(chuàng)建可先創(chuàng)建數(shù)據(jù)庫
貼下我的全部代碼:
$serverName = 'localhost'; $userName= ''; $password = ''; $dbName = ''; try { $dsn = 'mysql:host = $serverName;dbname = $dbName'; $conn = new PDO($dsn,$userName,$password); //初始化連接 //如果沒有數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫 $cql = "CREATE DATABASE if not exists $dbName"; $conn->exec($cql); //添加使用數(shù)據(jù)庫 $str = "use $dbName"; $conn->exec($str); echo '數(shù)據(jù)庫連接成功'.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:刪除賬戶的時候也會出現(xiàn)此問題,具體的解決辦法一并給出;
使用以下命令行刪除賬戶:
delete from user where user='賬戶名';
出現(xiàn):
ERROR 1046 (3D000): No database selected
因為是直接使用 SQL 語句的方式來刪除賬戶,所以必須先選擇 mysql 自身的數(shù)據(jù)庫:
use mysql;
下面是一組測試數(shù)據(jù)的實例;
測試用PDO方式進行預處理語句插入數(shù)據(jù),發(fā)現(xiàn)選定了數(shù)據(jù)庫名,但是不生效的BUG(無效的數(shù)據(jù)庫名),原來是前后有關系,在設定$dsn時,一定要把
dbname=XXX放在第一個參數(shù),即緊挨著$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 語句影響的行數(shù)
if ($rows) {
exit('添加成功');
}else{
exit('添加失敗');
}
} catch (PDOException $e) {
echo $e->getMessage();
}
問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!