MySQL數(shù)據(jù)庫用PDO建表或者運行時報錯為 “SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”的解決辦法

[重要通告]如您遇疑難雜癥,本站支持知識付費業(yè)務,掃右邊二維碼加博主微信,可節(jié)省您寶貴時間哦!

今天在調(diào)試一個掃雷的源碼的時候,運行一下提示“SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”這個意思;這個意思好像是PDO出現(xiàn)的問題,我的具體是因為數(shù)據(jù)庫鏈接的問題,這很尷尬,不過呢,依然我把找到的相關答案一并寫進文章里;

MySql ERROR 1046(3D000): No Database Selected

No DataBase Selected 翻譯->意思是說沒有選種數(shù)據(jù)庫.
首先要建立數(shù)據(jù)庫,在將表放入數(shù)據(jù)庫中;都知道是沒有選擇數(shù)據(jù)庫,就是沒有回答到正題上,此刻貼出解決方法:

如果已經(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號又微信號)右上方掃一掃可加博主微信

所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!

支付寶贊助
微信贊助

免責聲明,若由于商用引起版權(quán)糾紛,一切責任均由使用者承擔。

您必須遵守我們的協(xié)議,如您下載該資源,行為將被視為對《免責聲明》全部內(nèi)容的認可->聯(lián)系老梁投訴資源
LaoLiang.Net部分資源來自互聯(lián)網(wǎng)收集,僅供用于學習和交流,請勿用于商業(yè)用途。如有侵權(quán)、不妥之處,請聯(lián)系站長并出示版權(quán)證明以便刪除。 敬請諒解! 侵權(quán)刪帖/違法舉報/投稿等事物聯(lián)系郵箱:service@laoliang.net
意在交流學習,歡迎贊賞評論,如有謬誤,請聯(lián)系指正;轉(zhuǎn)載請注明出處: » MySQL數(shù)據(jù)庫用PDO建表或者運行時報錯為 “SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected”的解決辦法

發(fā)表回復

本站承接,網(wǎng)站推廣(SEM,SEO);軟件安裝與調(diào)試;服務器或網(wǎng)絡推薦及配置;APP開發(fā)與維護;網(wǎng)站開發(fā)修改及維護; 各財務軟件安裝調(diào)試及注冊服務(金蝶,用友,管家婆,速達,星宇等);同時也有客戶管理系統(tǒng),人力資源,超市POS,醫(yī)藥管理等;

立即查看 了解詳情