さくらの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=....」の列が出ています。
何が問題で繋がらないのでしょうか?
どなたかご教示お願い致します。
$server = "(ipアドレス)\SQLEXPRESS"; って記法は本当に合っているんですかね? IPアドレスとバックスラッシュの組み合わせって一般的ではないような気がしますが
そもそも「さくらのSqlServer」ってサービスはあるんでしょうか? 軽く調べたところではそういう名称のサービスも見当たらないのでよく分かりませんので、その辺の説明を正しく書いた方が良いと思います。
ご回答ありがとうございます。
\って打つとバックスラッシュになるので、これで正しいものかと思ってました。
xamppでは問題なく動いているので、疑問にも思ってなかったのですが、違うのでしょうか?
正式名称は「さくらのVPS for Windows Server」です。
やっぱり状況よく分かりませんが、外部のサーバ(ロリポップ?)というのはさくらとは別サーバですよね。だったら"(ipアドレス)\SQLEXPRESS"という表記で繋がることはまずないと思いますが。普通はIPアドレスとポート番号じゃないですかね? 11.22.33.44:1234 とかの表記ならまだあり得ると思いますけど。どちらにせよ、その辺の情報をさくらのサーバのドキュメントやサーバの設定から探して指定するのだとおもいます。
ポート番号を追加してみましたが接続できませんでした
https://www.php.net/manual/ja/ref.pdo-sqlsrv.connection.php
をみるとポート番号を指定する場合の例は
new PDO("sqlsrv:Server=localhost,1521;Database=testdb", "UserName", "Password");
みたいですね。このような書式で正しく追加したでしょうか?
あとは指定するポート番号が正しいか、外部からそのポートに接続できるようになっているかなどを確認するなどでしょうか。これ以外の原因なら分かりません。
上記のコードをそのまま引用してみたら、 Call to undefined function sqlsrv_errorsと出ました。
先程は出てなかったエラーのように思います。
bitが違う?などのサイトも見つけたんですが、xamppでも、サーバー上でも64bitと出てましたので、何か他が違うんでしょうね。。。心おれそうです????
「あとは指定するポート番号が正しいか、外部からそのポートに接続できるようになっているか」というところはチェックされたのでしょうか? 「外部接続が出来るように設定」とは書いてありますが、具体的になにをしたのかが記載されてないので分かりません。
https://manual.sakura.ad.jp/vps/network/packetfilter.html
さくらのVPSはしばらく使ってないのでどうだったか忘れましたが、この辺の設定は問題ないということでしょうか? パケットフィルタが有効になっていなくても、Windows Server側でファイアーウォールの設定の調整が必要なのかもしれません。その辺も確認された方が良いと思います。
外部接続はできていると思います。accessにてodbc接続、xamppでの接続、これらは外部接続設定ができていないと繋がらないと思います。実際、ポートを開く設定をするまでは繋がりませんでしたし、設定したパソコン、wifi環境以外のPCからも接続ができております。
パケットフィルタという項目はありませんでした。画像ではサーバーの監視の横にあるようでしたが、こちらには表示されてませんでした。
「accessにてodbc接続、xamppでの接続、これらは外部接続設定ができていないと繋がらないと思います。」と書かれていますが、提供されている情報だけで外部の人がそれが本当に正しいのかどうなのか判別ができないです。accessやxamppの情報が書かれていないのでなんともですが、少なくとも $server = "(ipアドレス)\SQLEXPRESS"; で繋がっていたのであれば、ぞれは外部からの接続のようには思えないですけどね。力になれずすいません。
外部接続できてることは間違いないのです。。。
こちらこそありがとうございました!
> $server = "(ipアドレス)\SQLEXPRESS"; って記法は本当に合っているんですかね? IPアドレスとバックスラッシュの組み合わせって一般的ではないような気がしますが
SQL Server接続文字列でインスタンスを指定するなら別に間違ってないと思うけど。
機器の構成がどうなってるのかわかんないけど、使用するportの指定が必要かどうかとか、そのportはfirewallで塞がれてないのかとか、そういう極々当たり前のチェックはしてるのかどうか、とかその辺を書くべきでは。
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の手前で弾かれてるパターンもあるでしょうし。
お二人ともありがとうございます。
私なりに色々と調べておりまして、レンタルサーバーのphp設定にsqlsrvが指定されてなかったことが判明しました。多分このせいだろうと思うのですが、直接編集できないため、どうしたものかと悩んでおります。
SQLSERVERデータを使ってを公開サイトを作りたい場合、IISしかないのでしょうか。。。
別の質問になってしまいますね。ありがとうございました!
https://docs.microsoft.com/ja-jp/sql/connect/php/microsoft-php-driver-for-sql-server?view=sql-server-2017
PHPにさえ組み込めればいいので別にIISじゃなくても良さそうですが、ロリポップみたいなレンタルサーバを使うとなると厳しそうですね。SQL Serverと同じようにVPSを借りてHTTPDやPHPの環境まるっと自分で作るしかないかもしれません。
やはりそうなんですね????
私にとってはIISも難しいので、ひとまずIISで環境作りを練習してみてから考えようかと思います。
IISでPHPは表示できるようになったのですが、今度はsessionエラーが出て躓いてます????
公開までのハードルはかなり高そうです(´;ω;`)
そもそもなんだけど、SQL Serverをそのままどこからでもアクセスできるような場所に公開しようとしてる?
それはセキュリティ上ありえない構成なんだけども。
「外部」というのが「別のローカルネットワーク」ぐらいの意味かと思ってたけど、パブリックに公開する構成ってのは普通ない。接続文字列が推測できれば誰でもDBまるごと削除したりやりたい放題になる。
ここらへんどう考えてるのかわからんから「どういう構成で」とかその辺まで質問文に書くべきだ、って話ではあるんだが。
言葉を間違ってたらごめんなさい。
何をしたいかというと、そもそもはaccessで色んなデータを集計したりしていたんですが、そこの一部分を各担当に入力させたいということで、sqlserverを使って複数の人間が編集できるようにしたい、と。
その一部分の担当者がパソコンを使用することは殆どないのでそこの部分だけwebで入力できないか、ということでした。前はMySQLを使ってその部分だけ入力してもらったりしてたんですが、MySQLをaccessでodbc接続すると、重い、急遽接続が切れるなど使いずらいことが多々あったのでこういうことに。。。
一応ログイン画面など使ってはいますが、危険すぎですか?????
あなたの回答
tips
プレビュー