我以为我理解了课程是如何工作的,然后我尝试了这段代码:
class user
{
var $dbcon;
var $dbinfo;
var $con;
var $error;
function dbConnect()
{
$this->dbinfo['server'] = "localhost";
$this->dbinfo['database'] = "foolish_faith";
$this->dbinfo['user'] = "user";
$this->dbinfo['password'] = "password";
$this->con = "mysql:host=".$dbinfo['server']."; dbname=".$dbinfo['database'];
$this->dbcon = new PDO($con, $dbinfo['user'], $dbinfo['password']);
$this->dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->error = $this->dbcon->errorInfo();
if ($error[0] != "")
{
print "Error!";
print_r($error);
}
}
}
现在它只是吐出这个错误:
致命错误:未捕获的异常 'PDOException',消息'无效 数据源名称'in E:\ PortableApps \ XAMPP \ htdocs中\ dbcon.php:24 堆栈跟踪:#0 E:\ PortableApps \ XAMPP \ htdocs中\ dbcon.php(24): PDO-> __ construct('',NULL,NULL)#1 E:\ PortableApps \ XAMPP \ htdocs中\ login.php中(4): user-> dbConnect()#2 {main}抛出 E:\ PortableApps \ XAMPP \ htdocs中\ dbcon.php 第24行
任何人都可以看到我做错了什么,因为我确定这与我在课堂上缺乏知识有关吗?
答案 0 :(得分:3)
$this->con = "mysql:host=".$dbinfo['server']."; dbname=".$dbinfo['database'];
$this->dbcon = new PDO($con, $dbinfo['user'], $dbinfo['password']);
当您访问类实例的变量时,您必须使用 - >运营商。在这种情况下,您使用$this->dbinfo
而不是$dbinfo
和$this->con
而不是$con
。你已经在左侧正确完成了,但在右侧错过了一些。
答案 1 :(得分:1)
不要在连接字符串中放置空格。 ("; dbname="
应为";dbname="
)。
此外,有几个实例需要在某些类实例变量($this->
,$this->con
等等)前面添加$this->dbinfo
。
答案 2 :(得分:1)
这样做:$this->dbcon = new PDO($con, $dbinfo['user'], $dbinfo['password']);
在此:$this->dbcon = new PDO($this->con, $dbinfo['user'], $dbinfo['password']);
答案 3 :(得分:0)
这是dsn语法:http://fr2.php.net/manual/en/ref.pdo-mysql.connection.php 我没有看到任何空格,也许你应该删除分号后添加的那个......