LoginSignup
0
0

xampp(PHP)からaccessにアクセスできない時

Last updated at Posted at 2020-09-15

xampp(PHP)からaccessに接続しようとしてハマったのでメモ。

環境

  • windows10 Pro 64bit
  • xampp 64bit
  • accessの形式 accdb

PHPのソース

define('ACCESS_DB_DRIVER',   '{Microsoft Access Driver (*.mdb, *.accdb)}');

$dbq = 'C:/xampp/htdocs/***.accdb';


$objPdo = new PDO("odbc:Driver=" . ACCESS_DB_DRIVER . ";DBQ=" . $dbq . ";");

エラー内容

PHP Fatal error:  Uncaught PDOException: SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][ODBC Driver Manager] ...

解決方法

php.iniを編集

;extension=pdo_odbc

コメントアウトを外す

ODBCを確認

コントロール パネル>システムとセキュリティ>管理ツール>ODBCデータソース(64bビット)

「ドライバー」タブにMicrosoft Access Driverが無かったので、ドライバーをインストールすれば解決すると推測

ドライバーダウンロード

こちらの記事を参考にさせていただきました。
Microsoft Access(.mdb、.accdb)のODBC、OLEDBドライバーに関するまとめ

https://www.microsoft.com/ja-jp/download/details.aspx?id=13255
「AccessDatabaseEngine_X64.exe」をダブルクリックしインストール

テーブルによってデータが取得できない

たぶんテーブル名に入っている記号の問題だと思うのですが、バックスラッシュ「`」を入れたら解決しました。

$sql = "SELECT * FROM 03_案件(基本)テーブル;";

$sql = "SELECT * FROM `03_案件(基本)テーブル`;";

抽出条件でデータ型が一致しません。

SQLSTATE[22018]: Invalid character value for cast specification: -3030 [Microsoft][ODBC Microsoft Access Driver] 抽出条 件でデータ型が一致しません。 (SQLExecute[-3030] at ext\pdo_odbc\odbc_stmt.c:259)

数値型に空文字「''」を挿入しようとすると発生するようです。

オートナンバー振り直し

テーブルを開いていない状態から
作成>クエリデザイン>SQL表示

sql
DELETE * FROM table_name;
ALTER TABLE table_name ALTER COLUMN id COUNTER(1,1);

3つ以上のテーブルを結合する時には括弧をつける

こちらの記事を参考にさせていただきました。
[Access] SQLでJOINをかけるときに括弧が必要

$sql = "SELECT * FROM (`テーブル` A INNER JOIN `テーブル` B ON A.id = B.id);";
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0