💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ منصور لیاقت
خطا No database selected
محمدرسول اصغری حل شده توسط محمدرسول اصغری

با سلام و احترام خدمت اساتید محترم
در حین درج اطلاعت در دیتابیس به خطا زیر میخورم
 

PHP Fatal error:  Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in /home/mansour/PhpstormProjects/pdo/insert.php:23

 

 

کدهای من در فایل connect.php

 <?php
list($host,$database,$user,$pass)=["localhost","pdo","root",""];
$db = new PDO("mysql:host=$host;dbname=$database;charset=utf8mb4",$user, $pass );
try {
    $db=new PDO("mysql:host=$host;database=$database;user=$user;password=$pass");
    echo"Connect SuccessFully" .PHP_EOL;
}
catch(PDOException $error){
echo "PDO ERROR : Faild To Connect :" .$error->getMessage() ."On Line :" .$error->getLine();
exit();
}

 

 

کدهای من در فایل insert.php

<?php
include_once 'connect.php';
$sql = "INSERT INTO user (id, fullName, age, city) VALUES (?,?,?,?)";
$stmt = $db->prepare($sql);
$users = [
    [1, 'aren', 2, 'kish'],
    [2, 'mahsa', 31, 'tehran'],
    [3, 'mansour', 34, 'golpayegan']
];
$db->beginTransaction();
foreach ($users as $user) {
    $stmt->execute($user);
    if ($user[1] == "mahsa") {
        exit();
    }
}
$db->commit();

 

 

 

سوال اول : خطا No database selected در صورتی که از فایل connect.php تست میگیرم ، دیتابیس متصل است ولی برای درج اطلاعات خطا می‌دهد

 


سوال دوم : در فایل connect.php جهت امتحان یکسری مقادیر را عوض کردم که به دیتابیس متصل نشود و پیغام خطا بگیرم ، اما عبارتی که درون رشته نوشتم چاپ نشد 
echo "PDO ERROR : Faild To Connect :" .$error->getMessage() ."On Line :" .$error->getLine();

 

پیشاپیش از زحمات شما سپاسگذارم .

درود آقای لیاقت عزیز

خطایی که باهاش مواجه هستید به خاطر اینه که در حین ساخت شیء PDO، پایگاه داده را به درستی مشخص نکردید. توی کد connect.php، دستور ایجاد PDO توی فایلتون به اینطور هست:

$db=new PDO("mysql:host=$host;database=$database;user=$user;password=$pass");

باید dbname به جای database استفاده شود:

$db=new PDO("mysql:host=$host;dbname=$database;charset=utf8mb4",$user, $pass );

کد نهایی connect.php : 

<?php
list($host,$database,$user,$pass)=["localhost","pdo","root",""];
try {
    $db=new PDO("mysql:host=$host;dbname=$database;charset=utf8mb4",$user, $pass );
    echo "Connect Successfully" . PHP_EOL;
}
catch(PDOException $error){
    echo "PDO ERROR: Failed To Connect: " . $error->getMessage() . " On Line: " . $error->getLine();
    exit();
} 

برای اینکه پیام خطاتون رو ببینید، باید مطمئن بشید که دستور echo توی قسمت catch درست کار می‌کنه. کد بالا باید به درستی پیام خطا را نمایش بده. با این حال، میتونید خطاهای PDO را به حالت استثنا تغییر بدید تا خطاهای بیشتری نمایش بده:

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

کد نهایی connect.php با اضافه کردن این ویژگی:

<?php
list($host,$database,$user,$pass)=["localhost","pdo","root",""];
try {
    $db = new PDO("mysql:host=$host;dbname=$database;charset=utf8mb4", $user, $pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connect Successfully" . PHP_EOL;
}
catch(PDOException $error){
    echo "PDO ERROR: Failed To Connect: " . $error->getMessage() . " On Line: " . $error->getLine();
    exit();
}

با این تغییرات، باید اتصال به دیتابیس بدون مشکل انجام بشه و اگر خطایی گرفتید، پیام خطا درست نمایش داده بشه.

در نهایت به این نکته توجه کنید که اطلاعات دیتابیس تون صحیح باشه و دیتابیس روی سیستم تون فعال باشه 

موفق باشید

 

 

بهترین پاسخ
محمدرسول اصغری ۱۵ خرداد ۱۴۰۳، ۰۵:۳۵