それぞれ 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>" ;