Поэтому я использую базу данных доступа (* 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, используя msaccess
Проблема в том, что IIS IUSER по умолчанию не может обращаться к файлам через сетевой ресурс. обходное решение описано здесь: http://support.microsoft.com/kb/207671 .
Я бы настоятельно рекомендовал использовать SQL Server (Express Edition, если не что иное), чем файл доступа – вы получите значительно улучшенный опыт +, вы сможете легко мигрировать по мере расширения сайта при необходимости.
Я нашел эту тему для аналогичной проблемы: http://ellislab.com/forums/viewthread/93160/ . Говорит, что вы должны попробовать загрузить загрузку драйвера odbc вручную с вашего контроллера:
$this->load->database(); $this->db->dbdriver = “odbc”;
В нем также говорится, что по какой-то причине конфигурация базы данных недоступна в драйвере odbc:
системы / базы данных / драйвера / ODBC / odbc_driver.php
Таким образом, вам также придется зайти туда и вручную загрузить конфигурацию базы данных.
$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);
Вы проверяли доступ для чтения / записи к этому файлу? Если ваше приложение php работает в IIS, ваша учетная запись пользователя IIS должна будет иметь права на чтение / запись для этого файла, а не учетную запись пользователя, которую вы используете для входа на ваш компьютер.
Проверьте, к какому пользователю работает ваша программа PHP. Список содержимого каталога с PHP для проверки. Учтите, что пользователь, на котором запущен ваш PHP, также не имеет сопоставления Z
, сделанного вами под вашим собственным именем пользователя.
После многих поисков (ничего из этого решения не получилось) я нашел другое решение, в некоторых ms Access db вы можете подключаться только с помощью двойной косой черты в строке подключения (не в пути к базе данных):
$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;
не уверен, в чем причина, потому что я смог подключиться к некоторым доступным db (тот же сервер, одна и та же папка, такая же версия Access), используя одиночные косые черты, а двойные слэши не работают, подумайте, что это глупая шутка того же парня, который работал над IE 🙁
это работает:
$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;