我正在尝试使用PDO将数据插入数据库中的3个表之一。当我调用下面的插入函数时,会收到错误:SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected.
答案 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。