質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1502閲覧

外部SQLSERVERへ接続できない

rei_01

総合スコア13

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/02/07 11:45

編集2021/02/07 11:48

さくらのSqlServerを借りて外部接続が出来るように設定をしました。
Accessからのodbc接続も確認し、webサイトを作成しました。
xampp環境では問題なく表示されるのですが、サーバーに上げるとエラーが出て接続できません。

レンタルサーバーはロリポップなのですが、下記のサイトを見つけ空白を無くしてみたりしたのですが、ダメでした。
https://note.com/rottenmarron/n/nbf2b958c3b09

PHP

1<?php 2$server = "(ipアドレス)\SQLEXPRESS"; 3$user = "test"; 4$pwd = "1234"; 5$db = "master"; 6try{ 7$conn = new PDO("sqlsrv:Server=$server;Database=$db",$user,$pwd); 8$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 9 10 11}catch(Exception $e){ 12//die(print_r($e)); 13 echo "データベースエラー"; 14} 15?>

このコードを別ページにて

PHP

1require("sql-server.php"); 2$sql = "SELECT * from dbo.table"; 3$stmt = $conn->query($sql);

で、呼び出しています。

エラー内容は「データベースエラー」という文字と「$stmt=....」の列が出ています。
何が問題で繋がらないのでしょうか?
どなたかご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/02/07 12:05

$server = "(ipアドレス)\SQLEXPRESS"; って記法は本当に合っているんですかね? IPアドレスとバックスラッシュの組み合わせって一般的ではないような気がしますが そもそも「さくらのSqlServer」ってサービスはあるんでしょうか? 軽く調べたところではそういう名称のサービスも見当たらないのでよく分かりませんので、その辺の説明を正しく書いた方が良いと思います。
rei_01

2021/02/07 12:12

ご回答ありがとうございます。 \って打つとバックスラッシュになるので、これで正しいものかと思ってました。 xamppでは問題なく動いているので、疑問にも思ってなかったのですが、違うのでしょうか? 正式名称は「さくらのVPS for Windows Server」です。
AbeTakashi

2021/02/07 12:21

やっぱり状況よく分かりませんが、外部のサーバ(ロリポップ?)というのはさくらとは別サーバですよね。だったら"(ipアドレス)\SQLEXPRESS"という表記で繋がることはまずないと思いますが。普通はIPアドレスとポート番号じゃないですかね? 11.22.33.44:1234 とかの表記ならまだあり得ると思いますけど。どちらにせよ、その辺の情報をさくらのサーバのドキュメントやサーバの設定から探して指定するのだとおもいます。
rei_01

2021/02/07 12:29

ポート番号を追加してみましたが接続できませんでした
AbeTakashi

2021/02/07 12:50

https://www.php.net/manual/ja/ref.pdo-sqlsrv.connection.php をみるとポート番号を指定する場合の例は new PDO("sqlsrv:Server=localhost,1521;Database=testdb", "UserName", "Password"); みたいですね。このような書式で正しく追加したでしょうか? あとは指定するポート番号が正しいか、外部からそのポートに接続できるようになっているかなどを確認するなどでしょうか。これ以外の原因なら分かりません。
rei_01

2021/02/07 13:05

上記のコードをそのまま引用してみたら、 Call to undefined function sqlsrv_errorsと出ました。 先程は出てなかったエラーのように思います。 bitが違う?などのサイトも見つけたんですが、xamppでも、サーバー上でも64bitと出てましたので、何か他が違うんでしょうね。。。心おれそうです????
AbeTakashi

2021/02/07 13:52

「あとは指定するポート番号が正しいか、外部からそのポートに接続できるようになっているか」というところはチェックされたのでしょうか? 「外部接続が出来るように設定」とは書いてありますが、具体的になにをしたのかが記載されてないので分かりません。 https://manual.sakura.ad.jp/vps/network/packetfilter.html さくらのVPSはしばらく使ってないのでどうだったか忘れましたが、この辺の設定は問題ないということでしょうか? パケットフィルタが有効になっていなくても、Windows Server側でファイアーウォールの設定の調整が必要なのかもしれません。その辺も確認された方が良いと思います。
rei_01

2021/02/07 14:00

外部接続はできていると思います。accessにてodbc接続、xamppでの接続、これらは外部接続設定ができていないと繋がらないと思います。実際、ポートを開く設定をするまでは繋がりませんでしたし、設定したパソコン、wifi環境以外のPCからも接続ができております。 パケットフィルタという項目はありませんでした。画像ではサーバーの監視の横にあるようでしたが、こちらには表示されてませんでした。
AbeTakashi

2021/02/07 14:31

「accessにてodbc接続、xamppでの接続、これらは外部接続設定ができていないと繋がらないと思います。」と書かれていますが、提供されている情報だけで外部の人がそれが本当に正しいのかどうなのか判別ができないです。accessやxamppの情報が書かれていないのでなんともですが、少なくとも $server = "(ipアドレス)\SQLEXPRESS"; で繋がっていたのであれば、ぞれは外部からの接続のようには思えないですけどね。力になれずすいません。
rei_01

2021/02/07 14:39

外部接続できてることは間違いないのです。。。 こちらこそありがとうございました!
gentaro

2021/02/07 16:20

> $server = "(ipアドレス)\SQLEXPRESS"; って記法は本当に合っているんですかね? IPアドレスとバックスラッシュの組み合わせって一般的ではないような気がしますが SQL Server接続文字列でインスタンスを指定するなら別に間違ってないと思うけど。 機器の構成がどうなってるのかわかんないけど、使用するportの指定が必要かどうかとか、そのportはfirewallで塞がれてないのかとか、そういう極々当たり前のチェックはしてるのかどうか、とかその辺を書くべきでは。
AbeTakashi

2021/02/07 17:42

https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/logging-in-to-sql-server?view=sql-server-ver15 これみるとたしかに名前付きインスタンスの指定でそのように書くんですね。となると、やはりPortとかFWとかその辺が怪しい気もしますが、FWを通過してるのか弾かれてるのかをログで確認したりとかはしてもいいと思います。そもそもWindows Serverの手前で弾かれてるパターンもあるでしょうし。
rei_01

2021/02/07 23:50

お二人ともありがとうございます。 私なりに色々と調べておりまして、レンタルサーバーのphp設定にsqlsrvが指定されてなかったことが判明しました。多分このせいだろうと思うのですが、直接編集できないため、どうしたものかと悩んでおります。 SQLSERVERデータを使ってを公開サイトを作りたい場合、IISしかないのでしょうか。。。 別の質問になってしまいますね。ありがとうございました!
rei_01

2021/02/08 01:19

やはりそうなんですね???? 私にとってはIISも難しいので、ひとまずIISで環境作りを練習してみてから考えようかと思います。 IISでPHPは表示できるようになったのですが、今度はsessionエラーが出て躓いてます???? 公開までのハードルはかなり高そうです(´;ω;`)
gentaro

2021/02/08 09:32

そもそもなんだけど、SQL Serverをそのままどこからでもアクセスできるような場所に公開しようとしてる? それはセキュリティ上ありえない構成なんだけども。 「外部」というのが「別のローカルネットワーク」ぐらいの意味かと思ってたけど、パブリックに公開する構成ってのは普通ない。接続文字列が推測できれば誰でもDBまるごと削除したりやりたい放題になる。 ここらへんどう考えてるのかわからんから「どういう構成で」とかその辺まで質問文に書くべきだ、って話ではあるんだが。
rei_01

2021/02/08 12:52

言葉を間違ってたらごめんなさい。 何をしたいかというと、そもそもはaccessで色んなデータを集計したりしていたんですが、そこの一部分を各担当に入力させたいということで、sqlserverを使って複数の人間が編集できるようにしたい、と。 その一部分の担当者がパソコンを使用することは殆どないのでそこの部分だけwebで入力できないか、ということでした。前はMySQLを使ってその部分だけ入力してもらったりしてたんですが、MySQLをaccessでodbc接続すると、重い、急遽接続が切れるなど使いずらいことが多々あったのでこういうことに。。。 一応ログイン画面など使ってはいますが、危険すぎですか?????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問