🚀 تخفیف ۳۵٪ + ۳.۵ میلیون هدیه! برنامه‌نویسی رو الان شروع کن - فقط امروز!
۰ ثانیه
۰ دقیقه
۰ ساعت
۸ امیر محمد وثوقی
Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected
جامعه پی اچ پی ایجاد شده در ۲۸ خرداد ۱۴۰۲

function UserExists(string $email , string $password):bool
{
    global $pdo;
    $sql = 'SELECT * FROM `users` WHERE email = :email password = :password;';
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':email' => $email , ':password' => $password]);
    $record = $stmt->fetch(PDO::FETCH_OBJ);
    return $record ? true : false;
}

من این تابع رو نوشتم برای گرفتن اطلاعات کاربر

 if(UserExists($params['email'] , $params['password']))
            die('user exists with data');

و با این شرط چک کردم وجود داشته باشه ولی به این اررور برخورد کردم تو بسیاری از کوعری هایی که زدم هم به این اررور خوردم مثل insert/delete

Fatal error: Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in C:\\xampp\\htdocs\\Space\\auth\\libs\\user-auth-lib.php:7 Stack trace: #0 C:\\xampp\\htdocs\\Space\\auth\\libs\\user-auth-lib.php(7): PDOStatement->execute(Array) #1 C:\\xampp\\htdocs\\Space\\auth\\auth.php(10): UserExists('user@g.c', 'ekewoekow') #2 {main} thrown in C:\\xampp\\htdocs\\Space\\auth\\libs\\user-auth-lib.php on line 7

با این روش هم تست کرم ولی جوابی نگرفتم

function UserExists(string $email , string $password):bool
{
    global $pdo;
    $sql = 'SELECT * FROM `users` WHERE (email,password) VALUES (:email,:password);';
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':email' => $email , ':password' => $password]);
    $record = $stmt->fetch(PDO::FETCH_OBJ);
    return $record ? true : false;
}
امیر محمد وثوقی ۲۸ خرداد ۱۴۰۲، ۱۷:۴۳

همچنین دستور insert

function insertUser(array $userData)
{
    global $pdo;
    $passwordHash = password_hash($userData['password'] , PASSWORD_BCRYPT);
    $sql = 'INSERT INTO `users` WHERE (name,email,password) VALUES (:name,:email,:password);';
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':name' => $userData['name'] , ':email' => $userData['email'] , ':password' => $passwordHash]);
    $stmt->rowCount() ? true : false;
}
امیر محمد وثوقی ۲۸ خرداد ۱۴۰۲، ۱۸:۰۸

سلام،

لاینی که new PDO نوشتید رو بررسی کنید در رشته dbname رو درست مقداردهی کرده باشید.

محسن موحد ۲۸ خرداد ۱۴۰۲، ۲۰:۱۱
# config for database connection 
$database_config = (object) [
    'dbname' => 'space',
    'host' => 'localhost',
    'user' => 'root',
    'pass' => ''
];

لاینی که new PDO نوشتم

try {
    $pdo = new PDO("mysql:dbname={$database_config->dbname};host={$database_config->host};" , $database_config->user , $database_config->pass);
    // echo 'connect to database successfully';
} catch (\\PDOException $error) {
    echo 'can not connect to database Error:' . $error->getMessage();
}
امیر محمد وثوقی ۲۹ خرداد ۱۴۰۲، ۰۵:۵۲

از تابع لیست هم استفاده کردم ولی متاسفانه نتیجه یکی هست

[$dbname , $host , $user , $password] = ['space' , 'localhost' , 'root' , ''];


    $pdo = new PDO("mysql:dbname={$dbname};host={$host};" , $user , $pass);
امیر محمد وثوقی ۲۹ خرداد ۱۴۰۲، ۰۵:۵۴

سلام امیر محمد عزیز

آرگومان‌های کلاس pdo رو اشتباه پاس دادید.

باید الگوش به شکل زیر باشه:(موارد مربوطه رو جایگذاری کنید)


new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
احمدرضا فاطمی کیا ۲۹ خرداد ۱۴۰۲، ۰۶:۵۷

متاسفانه حل نشد

 $pdo = new PDO("mysql:host=$host;dbname=$dbname;",$user,$password);

ارور برای تابعی که نوشتم میده

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''amir@gmail.com' password 'hjk'' at line 1 in C:\\xampp\\htdocs\\Space\\auth\\libs\\user-auth-lib.php:10 Stack trace: #0 C:\\xampp\\htdocs\\Space\\auth\\libs\\user-auth-lib.php(10): PDOStatement->execute(Array) #1 C:\\xampp\\htdocs\\Space\\auth\\auth.php(10): userExists('amir@gmail.com', 'hjk') #2 {main} thrown in C:\\xampp\\htdocs\\Space\\auth\\libs\\user-auth-lib.php on line 10


وقتی به این صورت مقدار دهی میکنم

SELECT * FROM `users` WHERE (email,password) VALUES (:email,:password);

ارور این گونه میشه

SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'VALUES ('amir@gmail.com','hjk')' 

به نظرم اشتباه از آرگومان‌های کلاس pdo نباشه

امیر محمد وثوقی ۲۹ خرداد ۱۴۰۲، ۰۷:۳۵

کوئری سلکت رو اشتباه نوشتید و سلکت اصلا values تداره. احتمالا دنبال نوشتن insert بودید که به این شکل است:

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

همچنین شما در کدهای بالاتری که در پست اول گذاشتید، اینسرت نوشتید که اون هم اشتباهه، قسمت values بعد از where نمیاد. where برای مشخص کردن شرط هست.

اگر سلکت هم بخواید بنویسید بازهم where اشتباه نوشته شده و شرط‌ها به این شکل هستند مثلا username="test"

select * from users where email="test@gmail.com" and password="123"
بهترین پاسخ
محسن موحد ۲۹ خرداد ۱۴۰۲، ۰۹:۰۳