ubuntu から sqlserver に接続してデータを閲覧

それぞれ virtualbox の ubuntu 18.04 desktop から windows 7 の sqlserver に接続していろいろと操作します。
ubuntu には unix odbc がインストールされています。

まずは接続

コマンドラインから接続できることを確認します。


isql -v sql2012 heno moheno
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

テーブル一覧

テーブル一覧は以下のようにします。


SELECT name FROM sys.objects ;

テーブルのカラム一覧

あるテーブルのカラム一覧を取得するのは、


SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'KensaFIL';

sqlserver で limit 100

sqlserver では limit 100 は使えないようで、 top 100 とすると select 数を限定できます。


SELECT TOP 100 * FROM $tblname ;

テーブル名リストもカラム構成もわからないまま sqlserver のデータを閲覧する php

まずはテーブル一覧。


<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="../CSS/mystyle.css">
<script src="../js/jquery-3.3.1.min.js"></script>
<script type="text/javascript">	
$(function(){
	$('td').on('click',function(){
		var tblName = $(this).text();
		location.href = "top100.php?tblName=" + tblName ;
	});
});
</script>
</head>
<body>
<h1>lapis 2 のテーブル一覧</h1>
<?php
//------------------------------------
require_once('../dbinfo/sqlserver.php') ;
//------------------------------------
try{
	$pdo = new PDO('odbc:Driver={ODBC Driver 17 for SQL Server};Server=10.0.2.5;Database=Lapis',username,password);
	$stmt=$pdo->prepare("SELECT name FROM sys.objects ;");
	$stmt->execute() ;
	echo "<table class='datashow'><tr><th>テーブル名</th></tr>" ;
	while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
		$tblname = $row['name'];
		echo "<tr><td>$tblname</td></tr>" ;
	}
	echo "</table>" ;
}catch(PDOExpression $e){
  var_dump($e->getMessage());
}
$pdo=null;
?>
</body>
</html>

テーブル一覧で表示されたテーブル名をクリックすると、そのテーブル名が top100.php に渡されます。
top100.php は、

<?php
//------------------------------------
require_once('../dbinfo/sqlserver.php') ;
//------------------------------------
class browseTop100{
	public function showCol( $tblname )
	{
		$colArr = [] ;
		try{
			$pdo = new PDO('odbc:Driver={ODBC Driver 17 for SQL Server};Server=10.0.2.5;Database=Lapis',username,password);
			$stmt=$pdo->prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? ;");
			$stmt->execute( array($tblname) ) ;	
			echo "<tr>" ;
			while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
				$colname = $row['COLUMN_NAME'];
				echo "<th>$colname</th>" ;
				$colArr[] = $colname ;
			}
			echo "</tr>" ;
			return $colArr ;
		}catch(PDOExpression $e){
		  var_dump($e->getMessage());
		}
	}
	public function showData( $tblname, $colArr )
	{
		try{
			$pdo = new PDO('odbc:Driver={ODBC Driver 17 for SQL Server};Server=10.0.2.5;Database=Lapis',username,password);
			$stmt=$pdo->prepare("SELECT TOP 100 * FROM $tblname ;");
			$stmt->execute() ;	
			while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
				echo "<tr>" ;
				foreach( $colArr as $col ){
					$data = $row[$col];
					echo "<td>$data</td>" ;						
				}
				echo "</tr>" ;			
			}		
		}catch(PDOExpression $e){
		  var_dump($e->getMessage());
		}
	}
}
//---------------------------------
$tblname = $_GET['tblName'] ;
echo "<h1>$tblname</h1>" ;
$broweData = new browseTop100() ;
echo "<table class='datashow'>" ;
$colArr = $broweData -> showCol( $tblname ) ;
$broweData -> showData( $tblname, $colArr ) ;
echo "</table>" ;