刚开始使用PDO。请解释我的连接错误。它总是显示“你已连接”。
<?php
define('user','root');
define('pass','');
define('db','login_db');
try
{
$dbh = new PDO("mysql:host = localhost; dbname = db",user,pass);
echo "You are connected";
}
catch(PDOException $e)
{
echo $e -> getMessage();
}
?>
还提供了一些您知道的PDO教程或电子书。提前谢谢。
答案 0 :(得分:1)
问题是由数据源名称(DSN)中的2个语法错误引起的(PDO连接字符串中的第一个参数)。
"...dbname = db"
传递给连接字符串。由于db
包含在双引号中,因此将被解释为字符串而不是常量。 您的DSN中不能包含空格。它应该是:
"mysql:host=localhost;dbname=login_db" //no spaces.
我测试了这个,它表现出一些奇怪的行为:
host
与第一个=
符号之间的空格似乎会导致问题。如果有空格,即使“localhost”拼写错误,也会回显"You are connected"
。dbname
与其=
符号之间有空格,即使指定的数据库名称不正确,也会显示连接。我的猜测是,这是PDO类如何解析DSN的一些怪癖。
从DSN中删除所有空格。
您还需要以不同的方式传入数据库名称。有不同的方法来解决这个问题。为了不再有任何奇怪的调试错误,我建议您使用变量而不是常量定义:
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'login_db';
try{
$dbh = new PDO("mysql:host=$host;dbname=$db",$user,$pass);
echo "You are connected";
}
catch(PDOException $e){
echo $e -> getMessage();
}
至于好的教程,你可以看看这些:
Net.tuts+ : PHP Database Access
当然不要忘记php.net文档。
答案 1 :(得分:0)
常量标识符应为大写:
define('USER','root');
如果你想使用常量,你可以这样做:
$dbh = new PDO("mysql:host = ". HOST .";dbname=" . DB ,USER,PASS);