SQLSTATE [3D000]:无效的目录名称:1046未选择任何数据库

时间:2015-11-19 03:27:16

标签: php mysql pdo

我正在尝试使用PDO将数据插入数据库中的3个表之一。当我调用下面的插入函数时,会收到错误:SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected. enter image description here

2 个答案:

答案 0 :(得分:4)

可能会出现在这里

在我看来,您还没有为您的连接创建任何变量/数组,或者未正确配置。 (问题中没有足够的代码发布)。

从PDO连接手册http://php.net/manual/en/pdo.connections.php

示例#1连接到MySQL

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>

示例#2处理连接错误

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

另外,看看&#34;&#34;&#34;&#34;你的代码,我觉得你在你的列周围使用常规引号,而不是刻度。那些是两种不同的动物

INSERT INTO Students ('RIN', 'First Name', 'Last Name' ...

并且在单词之间有空格,其中是;必须使用滴答。

因此,您需要将代码修改为

INSERT INTO Students (`RIN`, `First Name`, `Last Name` ...

并将引号更改为上面列出的所有其他列名称的刻度。我不打算在这里打字。

您还需要检查DSN中的异常错误。使用你现在拥有的东西,还不够。

示例#1创建PDO实例并设置错误模式

<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

?>
  • 确保您选择(并创建)了正确的数据库/表,并确实创建了所有这些列并使用正确的类型和长度。

如果您收到MySQL可能抱怨的内容(例如撇号)的错误,那么您将需要转义数据;无论如何你应该做的事情。

请参阅以下内容,并使用准备好的声明:

答案 1 :(得分:0)

在您的代码中,我没有看到您选择数据库的位置或时间。有关详细信息,请参阅this

但要清楚这就是我所指的

$conn = new mysqli($servername, $username, $password, $dbname);

你可以看到最后一个变量是dbname。