刚刚开始使用 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 教程或电子书。提前致谢。
该问题是由数据源名称 (DSN)(PDO 连接字符串中的第一个参数)中的 2 个语法错误引起的。
错误
- 您不能将数据库常量传递到连接字符串中
"...dbname = db"
。自从db
用双引号括起来,并将被解释为字符串而不是常量。
-
DSN 中不能有空格。它应该是:
"mysql:host=localhost;dbname=login_db" //no spaces.
我已经对此进行了测试,它表现出一些奇怪的行为:
- 具体来说,似乎之间的空间
host
和第一个=
标志导致问题。如果有空格就会回显"You are connected"
即使“localhost”拼写错误。
- 同样,如果之间有空格
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 数据库访问 http://net.tutsplus.com/tutorials/php/php-database-access-are-you-doing-it-correctly/
Net.tuts+:为什么使用 PDO http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/
当然,不要忘记 php.net 文档。
php.net :PDO http://php.net/manual/en/book.pdo.php
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)