Php PDO错误:未选择任何数据库
我正在制作一个寄存器脚本并第一次使用PDO,但在尝试使用它时出现了这个错误。使用MySQLi时,defines可以正常工作 我的代码给出了以下错误: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连接在解析属性时是区分大小写的。当应该使用
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就我而言。我到目前为止还不知道这一点。然而,我一直遵循手册中关于语法的规定,但人们永远不知道自己是否偏离了语法