###前提・実現したいこと
PHPでPDO接続でsqlserverを使用を試みていますが、日本語の項目名、テーブル名の場合、配列取得でエラーとなります。
英数字のテーブル、項目名は、正しく機能します。
(コードは、UTF8で記述)
どなたか、おわかりの方がいらっしゃいましたら、
日本語のテーブルを扱う方法をおしえていただけますでしょうか?
###発生している問題・エラーメッセージ
エラーメッセージ
PHP Notice: Undefined index: DPT in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 73
PHP Notice: Undefined index: DPT in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 74
PHP Notice: Undefined index: DPT略名_漢字 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 75
PHP Notice: Undefined index: DPT in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 73
PHP Notice: Undefined index: DPT in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 74
PHP Notice: Undefined index: DPT略名_漢字 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 75
PHP Notice: Undefined index: DPT in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 73
PHP Notice: Undefined index: DPT in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 74
PHP Notice: Undefined index: DPT略名_漢字 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 75
PHP
1<?php 2 3/** 4 * common.php 5 */ 6/** 7 * DSN 8 */ 9 10define('DSN_MSSQL', 'sqlsrv:server=.\sqlexpress;database=iryoumysql;'); 11 12/** 13 * エスケープ 14 */ 15function h($string) 16{ 17 return htmlspecialchars($string, ENT_QUOTES, 'utf-8'); 18} 19 20/** 21 * データベースコネクション 22 * @return \PDO 23 */ 24function db_con() 25{ 26 27 28 // MSSQL 29 $username = 'testuser'; 30 $password = 'testpass'; 31 $pdo = new PDO(DSN_MSSQL, $username, $password); 32 33 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 34 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 35 return $pdo; 36} 37 38/** 39 * select 40 * @param string $sql 41 * @param array $params 42 * @return array 43 */ 44 45 46function select($sql, $params = array()) 47{ 48 $pdo = db_con(); 49 $stmt = $pdo->prepare($sql); 50 $stmt->execute($params); 51 return $stmt->fetchAll(); 52}
###該当のソースコード
PHP
1<?php 2/** 3 * index.php 4 */ 5ini_set('display_errors', 1); 6require 'common.php'; 7 8// 商品リストを検索 9 10$sql_items = 'SELECT DPT, DPT略名_漢字 FROM DPT'; 11print 'DPTマスタ select'; 12var_dump($sql_items); 13$arrItems = select($sql_items); 14var_dump($arrItems); 15 16 17// 購入履歴の検索 18if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') === 'POST') { 19 20 $arr = array(); 21 22 $sql_trading = 'SELECT '; 23 $sql_trading .= 'SUM(t.hatchusu) AS quantity'; 24 $sql_trading .= ', s.venmein as shop_name '; 25 $sql_trading .= ', i.dptmein as item_name '; 26 $sql_trading .= ', l.linmein as lin_name '; 27 $sql_trading .= 'FROM VM_nouhin_jisseki t '; 28 $sql_trading .= 'INNER JOIN ven_mast s ON s.ven = t.ven '; 29 $sql_trading .= 'INNER JOIN dpt_mast i ON i.dpt = t.dpt '; 30 $sql_trading .= 'INNER JOIN lin_mast l ON l.lin = t.lin '; 31// $sql_trading .= 'WHERE 1 '; 32 $sql_trading .= 'WHERE 1=1 '; 33 34 if (0 < filter_input(INPUT_POST, 'shop')) { 35 $sql_trading .= 'AND t.ven = :shop_id '; 36 $arr[':shop_id'] = filter_input(INPUT_POST, 'shop'); 37 } 38 if (0 < filter_input(INPUT_POST, 'item')) { 39 $sql_trading .= 'AND t.dpt = :item_id '; 40 $arr[':item_id'] = filter_input(INPUT_POST, 'item'); 41 } 42 43// $sql_trading .= 'GROUP BY t.shop_id,t.item_id,t.lin_id '; 44 $sql_trading .= 'GROUP BY s.venmein,i.dptmein,l.linmein'; 45 46 $arrTradings = select($sql_trading, $arr); 47// var_dump($sql_trading); 48} 49?><!DOCTYPE HTML> 50<html lang="ja"> 51 <head> 52 <meta charset="UTF-8"> 53 <title>Ajaxサンプル</title> 54 <style type="text/css"> 55 table { 56 border-collapse: collapse; 57 width: 600px; 58 } 59 table th, table td { 60 border: 1px solid #CCC; 61 } 62 </style> 63 </head> 64 <body> 65 <form method="post"> 66 <p> 67 <label for="item">DPT</label> 68 <select name="item" id="item"> 69 <option value="">---- 選択してください ----</option> 70 71 <?php foreach ($arrItems as $item) : ?> 72 73 <?php if ($item['DPT'] == filter_input(INPUT_POST, 'item')): ?> 74 <option value="<?= h($item['DPT']); ?>" selected="selected"> 75 <?= h($item['DPT略名_漢字']); ?> 76 </option> 77 <?php else: ?> 78 <option value="<?= h($item['DPT']); ?>"> 79 <?= h($item['DPT略名_漢字']); ?> 80 </option> 81 <?php endif; ?> 82 83 <?php endforeach; ?> 84 </select>
###試したこと
エラーが出ている箇所の日本語項目名をバックックオート(`)で囲みましたが、エラーのままでした。
$item[0]、$item[1]にソ-スを変更しましたが、
エラーメッセージは同じでした。
PHP Notice: Undefined offset: 0 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 73
PHP Notice: Undefined offset: 0 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 74
PHP Notice: Undefined offset: 1 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 75
PHP Notice: Undefined offset: 0 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 73
PHP Notice: Undefined offset: 0 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 74
PHP Notice: Undefined offset: 1 in C:\inetpub\wwwroot\php\pdo_nihongo\index.php on line 75
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
PHP Version 5.4.45
IIS7.0
Microsoft SQL Server 2008 R2 Express

回答3件
あなたの回答
tips
プレビュー