Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO错误:未选择任何数据库_Php_Mysql_Pdo - Fatal编程技术网

Php PDO错误:未选择任何数据库

Php PDO错误:未选择任何数据库,php,mysql,pdo,Php,Mysql,Pdo,我正在制作一个寄存器脚本并第一次使用PDO,但在尝试使用它时出现了这个错误。使用MySQLi时,defines可以正常工作 我的代码给出了以下错误: Array ( [0] => SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected ) 这是代码:(/register.php) 这是用于连接数据库的文件:((config/db_connect.php) 快速测试表明PDO连接在解析属性时是区分大小写的。当应该使用

我正在制作一个寄存器脚本并第一次使用PDO,但在尝试使用它时出现了这个错误。使用MySQLi时,defines可以正常工作

我的代码给出了以下错误:

Array ( [0] => SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected )
这是代码:(/register.php)

这是用于连接数据库的文件:((config/db_connect.php)


快速测试表明PDO连接在解析属性时是区分大小写的。当应该使用小写的
DBName
时,可以使用
DBName
。据我所知,这并没有明确说明,但我能够在自己的环境中验证它

$PDO_new = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
//--------------------------------------------^^^^^^^^^^
不清楚您为什么还要通过MySQLi建立连接,因为MySQLi和PDO是可比较但不兼容的API。您通常需要一个或另一个,而不是两个(除非您将来自使用相反API的两个源的代码组合在一起)

建议将
new PDO()
包装在
try/catch
中,以便在设置
ERRMODE\u异常之前捕获连接错误

try {
  $PDO_new = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
} catch (PDOException $e) {
  // handle a connection error error
}
最后,如果我没有指出在
INSERT
语句中有普通变量,而不是绑定参数,那我就失职了。您应该像在第一条
SELECT
语句中一样,在这里用占位符绑定值

// Use placeholders please!
$insert = "INSERT INTO users(user_name, user_password_hash, user_email) VALUES(:input_username,:input_password_hash, :input_email)";
// prepare() then execute()...

快速测试表明PDO连接在解析属性时是区分大小写的。当应该使用小写的
DBName
时,可以使用
DBName
。据我所知,这并没有明确说明,但我能够在自己的环境中验证它

$PDO_new = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
//--------------------------------------------^^^^^^^^^^
不清楚您为什么还要通过MySQLi建立连接,因为MySQLi和PDO是可比较但不兼容的API。您通常需要一个或另一个,而不是两个(除非您将来自使用相反API的两个源的代码组合在一起)

建议将
new PDO()
包装在
try/catch
中,以便在设置
ERRMODE\u异常之前捕获连接错误

try {
  $PDO_new = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
} catch (PDOException $e) {
  // handle a connection error error
}
最后,如果我没有指出在
INSERT
语句中有普通变量,而不是绑定参数,那我就失职了。您应该像在第一条
SELECT
语句中一样,在这里用占位符绑定值

// Use placeholders please!
$insert = "INSERT INTO users(user_name, user_password_hash, user_email) VALUES(:input_username,:input_password_hash, :input_email)";
// prepare() then execute()...

快速测试表明PDO连接在解析属性时是区分大小写的。当应该使用小写的
DBName
时,可以使用
DBName
。据我所知,这并没有明确说明,但我能够在自己的环境中验证它

$PDO_new = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
//--------------------------------------------^^^^^^^^^^
不清楚您为什么还要通过MySQLi建立连接,因为MySQLi和PDO是可比较但不兼容的API。您通常需要一个或另一个,而不是两个(除非您将来自使用相反API的两个源的代码组合在一起)

建议将
new PDO()
包装在
try/catch
中,以便在设置
ERRMODE\u异常之前捕获连接错误

try {
  $PDO_new = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
} catch (PDOException $e) {
  // handle a connection error error
}
最后,如果我没有指出在
INSERT
语句中有普通变量,而不是绑定参数,那我就失职了。您应该像在第一条
SELECT
语句中一样,在这里用占位符绑定值

// Use placeholders please!
$insert = "INSERT INTO users(user_name, user_password_hash, user_email) VALUES(:input_username,:input_password_hash, :input_email)";
// prepare() then execute()...

快速测试表明PDO连接在解析属性时是区分大小写的。当应该使用小写的
DBName
时,可以使用
DBName
。据我所知,这并没有明确说明,但我能够在自己的环境中验证它

$PDO_new = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
//--------------------------------------------^^^^^^^^^^
不清楚您为什么还要通过MySQLi建立连接,因为MySQLi和PDO是可比较但不兼容的API。您通常需要一个或另一个,而不是两个(除非您将来自使用相反API的两个源的代码组合在一起)

建议将
new PDO()
包装在
try/catch
中,以便在设置
ERRMODE\u异常之前捕获连接错误

try {
  $PDO_new = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
} catch (PDOException $e) {
  // handle a connection error error
}
最后,如果我没有指出在
INSERT
语句中有普通变量,而不是绑定参数,那我就失职了。您应该像在第一条
SELECT
语句中一样,在这里用占位符绑定值

// Use placeholders please!
$insert = "INSERT INTO users(user_name, user_password_hash, user_email) VALUES(:input_username,:input_password_hash, :input_email)";
// prepare() then execute()...


为什么同时建立MySQLi和PDO连接?它们不兼容。我不确定PDO连接字符串是否区分大小写,但通常是小写的:
;dbname=“.DB_NAME
是的,请尝试将
DBName
更改为
DBName
。为什么要同时建立MySQLi和PDO连接?它们不兼容。我不确定PDO连接字符串是否区分大小写,但通常是小写:
;DBName”=“.DB_NAME
是的,请尝试将
DBName
更改为
DBName
。为什么要同时建立MySQLi和PDO连接?它们不兼容。我不确定PDO连接字符串是否区分大小写,但通常是小写:
;DBName”=“.DB_NAME
是的,请尝试将
DBName
更改为
DBName
。为什么要同时建立MySQLi和PDO连接?它们不兼容。我不确定PDO连接字符串是否区分大小写,但通常是小写:
;DBName”=“.DB_NAME
是的,尝试将
DBName
更改为
DBName
。啊,谢谢,我现在会测试这个。只是忘了删除Mysqli的行,因为我在测试它是否与mysqliYep一起工作时使用了它。它修复了问题,谢谢。我现在也可以看到为什么我将它更改为“DBName”,这是因为我使用phpstorm作为IDE,我不喜欢当我写“dbname”而不是“dbname”时,它说这是一个打字错误我敢肯定,我代表我自己和许多其他人,感谢你花时间来测试你的理论,Michael关于
dbname
区分大小写的理论。+1就我而言。我到目前为止还不知道这一点。然而,我一直遵循手册中关于语法的规定,但人们永远不知道自己是否偏离了语法