Codeigniter使用ms访问数据库

时间:2013-01-11 08:29:46

标签: php database codeigniter ms-access

所以我使用access database(* mdb)。 这是我的代码和成功连接:

$db['test']['hostname'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\blabla.mdb';
$db['test']['username'] = '';
$db['test']['password'] = '';
$db['test']['database'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\blabla.mdb';
$db['test']['dbdriver'] = 'odbc';
$db['test']['dbprefix'] = '';
$db['test']['pconnect'] = TRUE;
$db['test']['db_debug'] = TRUE;
$db['test']['cache_on'] = FALSE;
$db['test']['cachedir'] = '';
$db['test']['char_set'] = 'utf8';
$db['test']['dbcollat'] = 'utf8_general_ci';
$db['test']['swap_pre'] = '';
$db['test']['autoinit'] = TRUE;
$db['test']['stricton'] = FALSE;

现在我想从其他计算机上使用accessdb。 此accessdb(* mdb)已共享,我制作地图网络驱动器(Z :)。

所以我更改了主机名和数据库,但失败了:

$db['test']['hostname'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=Z:\blabla.mdb';
$db['test']['database'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=Z:\blabla.mdb';

我试着这样做:

$db['test']['hostname'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=\\10.0.0.107\share\blabla.mdb';
$db['test']['database'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=\\10.0.0.107\share\blabla.mdb';

但它仍然是错误的:

Unable to connect to your database server using the provided settings.
Filename: D:\folder\folder\system\database\DB_driver.php

Line Number: 124

甚至我尝试用php连接 这是结果php using msaccess

7 个答案:

答案 0 :(得分:2)

问题是默认的IIS IUSER无法通过网络共享访问文件。 解决方法详见:http://support.microsoft.com/kb/207671

我强烈建议您使用SQL Server(Express Edition,如果没有其他)而不是访问文件 - 您将获得更好的体验+如果需要,您将能够更轻松地迁移网站。

答案 1 :(得分:1)

我发现这个问题出现了类似的问题:http://ellislab.com/forums/viewthread/93160/。说你应该尝试从控制器手动加载odbc驱动程序:

$this->load->database();
$this->db->dbdriver = “odbc”;

它还说由于某种原因,odbc驱动程序中没有数据库配置:

  

系统/数据库/驱动程序/ ODBC / odbc_driver.php

因此您可能还需要手动加载数据库配置。

答案 2 :(得分:1)

$db['second']['hostname'] = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:/wamp/www/ket_noi_access/test1.mdb";//C:\wamp\www\ket_noi_access
$db['second']['username'] = "ADODB.Connection";
$db['second']['password'] = "xxxxx";
$db['second']['database'] = "C:/wamp/www/ket_noi_access/test1.mdb";
$db['second']['dbdriver'] = "odbc";
$db['second']['dbprefix'] = "";
$db['second']['pconnect'] = TRUE;
$db['second']['db_debug'] = TRUE;
$db['second']['cache_on'] = FALSE;
$db['second']['cachedir'] = "";
$db['second']['char_set'] = "utf8";
$db['second']['dbcollat'] = "utf8_general_ci";
$db['second']['swap_pre'] = '';
$db['second']['autoinit'] = TRUE;
$db['second']['stricton'] = FALSE;

function __construct(){
    parent::__construct();
    $this->legacy_db = $this->load->database('second',true);
}
function LayDanhSach(){
    $this->legacy_db->select('*');
    $this->legacy_db->from('ban');
    $query = $this->legacy_db->get();
    $kq=$query->result();
    $this->legacy_db->close();
    //$this->db->close();
    return $kq;    
}

$this->load->model("ban_model");
$ds=$this->ban_model->LayDanhSach();
$st="This is demo multi database and msaccess connect <br>";        
$st.=json_encode($ds);
$this->data['content']=$st;//json_encode($ds);//echo json_encode($ds);
$this->load->view('index_view2',$this->data,false);

答案 3 :(得分:0)

您是否检查过该文件的读/写权限?如果您的php应用程序在IIS上运行,那么您的IIS用户帐户将需要具有该文件的读/写权限,而不是您用于登录计算机的用户帐户。

答案 4 :(得分:0)

检查您的PHP程序运行的用户。使用PHP列出目录内容以进行检查。请考虑运行PHP的用户也没有使用您自己的用户名进行的Z映射。

答案 5 :(得分:0)

经过多次搜索(上述解决方案没有任何工作)我发现了一个不同的解决方案,在某些ms上,访问数据库只能在连接字符串中使用双斜线连接(不在数据库路径中):

$db['test']['hostname'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\path\\to\my.mdb';
$db['test']['username'] = '';
$db['test']['password'] = '';
$db['test']['database'] = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\path\to\my.mdb';
$db['test']['dbdriver'] = 'odbc';
$db['test']['dbprefix'] = '';
$db['test']['pconnect'] = TRUE;
$db['test']['db_debug'] = TRUE;
$db['test']['cache_on'] = FALSE;
$db['test']['cachedir'] = '';
$db['test']['char_set'] = 'utf8';
$db['test']['dbcollat'] = 'utf8_general_ci';
$db['test']['swap_pre'] = '';
$db['test']['autoinit'] = TRUE;
$db['test']['stricton'] = FALSE;

不确定是什么原因因为我能够使用单斜线连接一些Access数据库(相同服务器,相同文件夹,相同的Access版本)并且双斜线不起作用,认为这是同一个人的傻笑话谁在IE上工作: - (

答案 6 :(得分:0)

这有效:

$db['access']['hostname'] = 'DNS name created by me'; // or ip address
$db['access']['username'] = '';
$db['access']['password'] = '';
$db['access']['database'] = '';
$db['access']['dbdriver'] = 'odbc';
$db['access']['dbprefix'] = '';
$db['access']['pconnect'] = FALSE;
$db['access']['db_debug'] = TRUE;
$db['access']['cache_on'] = FALSE;
$db['access']['cachedir'] = '';
$db['access']['char_set'] = 'utf8';
$db['access']['dbcollat'] = 'utf8_general_ci';
$db['access']['swap_pre'] = '';
$db['access']['autoinit'] = TRUE;
$db['access']['stricton'] = FALSE;
相关问题