Php 为Microsoft Access数据库设置PDO连接类
你好 基本上,我正在尝试使用带有PHP的MicrosoftAccess数据库设置一个PDO连接类,以便在创建新页面时调用该类 到目前为止,我已经尝试从其他有关堆栈溢出的文章中对其进行改编: 注意:我对使用Microsoft Access数据库设置PHP完全是新手,我知道我的$dbName可能放错了位置,老实说,我不确定它会放在哪里Php 为Microsoft Access数据库设置PDO连接类,php,sql,database,ms-access,pdo,Php,Sql,Database,Ms Access,Pdo,你好 基本上,我正在尝试使用带有PHP的MicrosoftAccess数据库设置一个PDO连接类,以便在创建新页面时调用该类 到目前为止,我已经尝试从其他有关堆栈溢出的文章中对其进行改编: 注意:我对使用Microsoft Access数据库设置PHP完全是新手,我知道我的$dbName可能放错了位置,老实说,我不确定它会放在哪里 class connection{ public $con = ''; function __construct(){ $thi
class connection{
public $con = '';
function __construct(){
$this->connect();
/*probably in the wrong place but... */
$dbName = $_SERVER["DOCUMENT_ROOT"] . "\database/yakety1new.mdb";
}
function connect(){
try{
$this->con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName; Uid=Admin; Pwd=;");
$this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
echo 'We\'re sorry but there was an error while trying to connect to the database';
file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);
}
}
}
因此,我试图找出$dbName变量的位置,以及如何在索引页中调用连接类和SQL语句
我有一个基本想法,大致如下:
include_once '/pages/classes/connectionClass.php';
$con = new connection();
$sql = $this->con->prepare("SELECT * FROM celebs");
$result = $con->query($sql);
while ($row = $result->fetch()) {
$firstname = $row['firstname'];
$surname = $row['surname'];
echo $firstname;
echo $surname;
}
我运行脚本,只收到以下消息:'很抱歉,尝试连接到数据库时出错' 谁能给我指出正确的方向,任何人的帮助都会非常棒! 提前谢谢 编辑:好的,现在我真的迷路了-我一直在看我的代码,不知道为什么会出现错误:致命错误:对D:……中的非对象调用成员函数fetch()。。。。。。。第23行。下面是代码:
try{
include_once '\classes\connectionClass.php';
//get the DB connection
$con = new connection();
$pdoConnection = $con->connect();
//query the DB
$sql = $pdoConnection->prepare("SELECT * FROM celebs");
$result = $pdoConnection->query($sql);
while ($row = $result->fetch()) {
echo $row['firstname'];
echo $row['surname'];
}
} catch (Exception $e){
echo 'ERROR:'.$e->getMessage();
file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);
}
错误与此行有关:
而($row=$result->fetch()){
我哪里出错了?连接类
class connection{
private $con;
private $dbName;
function __construct(){
$this->dbName = $_SERVER["DOCUMENT_ROOT"] . "\database/yakety1new.mdb";
}
function connect(){
$this->con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$this->dbName; Uid=Admin; Pwd=;");
$this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
return $this->con;
}
}
以及代码:
try{
include_once '/pages/classes/connectionClass.php';
//get the DB connection
$con = new connection();
$pdoConnection = $conn->connect();
//query the DB
$sql = $pdoConnection->prepare("SELECT * FROM celebs");
$result = $pdoConnection->execute();
while ($row = $result->fetchAll(PDO::FETCH_ASSOC)) {
echo $row['firstname'];
echo $row['surname'];
}
} catch (Exception $e){
echo 'ERROR:'.$e->getMessage();
file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);
}
$dbname需要是实际使用它的函数的局部变量,或者需要定义为类的成员。目前,您将它作为一个甚至不使用它的函数的局部变量。并且您应该使用一种区分成员和局部变量的命名约定,可以在f类成员:
class connection
{
public $m_con = '';
private $m_dbName = '';
function __construct()
{
...
$m_dbName = $_SERVER["DOCUMENT_ROOT"] . "\database/yakety1new.mdb";
}
function connect()
{
try
{
$this->m_con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$m_dbName; Uid=Admin; Pwd=;");
或
非常感谢您的回复,但是我从后面得到了一个代码提示错误:$this->m_-con=new-PDO(“odbc:DRIVER={Microsoft-Access-DRIVER(*.mdb)};DBQ=$m_-dbName;Uid=Admin;Pwd=;”;它不像这样:$this->m_-con->setAttribute(PDO::ATTR_-ERRMODE,PDO::ERRMODE异常);我已尝试实施您的建议,并收到错误消息…“很抱歉,尝试连接到数据库时出错”您好,感谢您的回复。我似乎无法使此功能正常工作:(我已经做了你建议的修改,我得到了一个内部服务器错误问:在你建议的最后一行代码($result=$pdoConnection…)之后,你认为我的其余代码还可以吗?Hi@TimJohnstone如果你有多条记录,那么你应该使用
fetchAll(PDO::FETCH_ASSOC)
。您收到的错误是什么?很幸运,mate,我仍然收到相同的错误消息。您将返回值放在哪里?也许这就是我出错的地方?您在帖子中显示的错误是您编写的错误,PDO错误呢?$e->getMessage()
Tim如果您需要我,可以给我留言或发电子邮件给我cybermeda@gmail.comI不要认为您应该在连接数据库名称字符串中混合使用/
和\事实上,您可能只需要输入数据库名称,而不是实际的文件路径,如图所示
function connect()
{
try
{
$dbName = $_SERVER["DOCUMENT_ROOT"] . "\database/yakety1new.mdb";
$this->con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName; Uid=Admin; Pwd=;");