php - 未选择数据库?

标签 php mysql pdo

我正在尝试使用 PDO 将一些值插入到我的数据库中,但它只是说“未选择数据库”。

$host = "localhost";
$dbname = "aura";
$user = "root";
$pass = "somepassword";

try {
$DB = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$DB->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo $e->getMessage();
}

$SignUp = $DB->prepare("INSERT INTO `users` (`username`, `password`, `name`, `email`, `rank`, `lvl`, `xp`, `money`, `age`, `reg_ip`, `last_ip`, `created`, `last_online`, `last_action`, `online`)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ");

    $SignUp->bindValue(1, $username);
    $SignUp->bindValue(2, $password);
    $SignUp->bindValue(3, $name);
    $SignUp->bindValue(4, $email);
    $SignUp->bindValue(5, '1');
    $SignUp->bindValue(6, '1');
    $SignUp->bindValue(7, '1');
    $SignUp->bindValue(8, '100');
    $SignUp->bindValue(9, NULL);
    $SignUp->bindValue(10, $ip);
    $SignUp->bindValue(11, $ip);
    $SignUp->bindValue(12, $time);
    $SignUp->bindValue(13, $time);
    $SignUp->bindValue(14, $time);
    $SignUp->bindValue(15, $online);

    try{
    $SignUp->execute();
    } catch(PDOException $e){
    die($e->getMessage());
    } 

我不知道为什么会收到此错误,因为我已成功连接到数据库,并且如您所见,我已经指定了一个数据库。

最佳答案

它看起来不错,但是您可能会遇到第一次 try catch 的问题,并且您没有杀死,并且可能会将插入与第一次的错误混淆。 还使用 $e->__toString() 将整个语句包装在 try catch block 中,它将为您提供完整的堆栈跟踪,通常这使得更容易跟踪错误所在。

试试这个,我无法告诉您以下更改是否可以解决问题,但可能会使其更加清晰。

<?php 
$host = "127.0.0.1";
$dbname = "aura";
$user = "root";
$pass = "somepassword";

try {
    $DB = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $pass, array(
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
    );

} catch(PDOException $e) {
    die('<pre>'.$e->__toString().'</pre>');
}


try{
    $SignUp = $DB->prepare("
    INSERT INTO `users` (`username`, `password`, 
                         `name`, `email`, `rank`, 
                         `lvl`, `xp`, `money`, 
                         `age`, `reg_ip`, `last_ip`, 
                         `created`, `last_online`, 
                         `last_action`, `online`)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ");

    $SignUp->bindValue(1, $username);
    $SignUp->bindValue(2, $password);
    $SignUp->bindValue(3, $name);
    $SignUp->bindValue(4, $email);
    $SignUp->bindValue(5, '1');
    $SignUp->bindValue(6, '1');
    $SignUp->bindValue(7, '1');
    $SignUp->bindValue(8, '100');
    $SignUp->bindValue(9, NULL);
    $SignUp->bindValue(10, $ip);
    $SignUp->bindValue(11, $ip);
    $SignUp->bindValue(12, $time);
    $SignUp->bindValue(13, $time);
    $SignUp->bindValue(14, $time);
    $SignUp->bindValue(15, $online);
    $SignUp->execute();
} catch(PDOException $e){
    die('<pre>'.$e->__toString().'</pre>');
}
?>

关于php - 未选择数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23945480/

相关文章:

php - 如何使用 PHP/MySQLi 从数据库填充复选框

Mysql存储过程改变多个表结构

php - 通过 Unix 套接字的 MySQL 连接适用于 mysqli,但不适用于 PDO

PHP/MySQL 不返回数据库中的行数

php - 处理php表单中的复选框值连接到mysql数据库

PHP:简单的 PDO 循环不起作用?

mysql - 为什么我们不应该在生产服务器上的 mysql 查询中使用 Select *?

php - 使用 PHP 和 For 循环将数据输入到 MySQL 表

php - updateOrCreate() 给出 Column not found : 1054 Unknown column '0' in 'where clause'

php - MySQL 将 3 个表与同一个表中的 2 个表组合起来