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

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

ただいまの
回答率

88.09%

PHPでMySQLに接続できません。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 972

score 51


当方、初心者です。
ご教示のほど宜しくお願い致します。

前提・実現したいこと

下記をレンタルサーバーでそのまま実装しようとしています。
[https://developers.google.com/maps/solutions/store-locator/clothing-store-locator](https://developers.google.com/maps/solutions/store-locator/clothing-store-locator)
上記手順通り、全て設定したのですが、実行し、chromeのデベロッパツールでみると、PHPでMySQLに接続できていないようでした。

発生している問題・エラーメッセージ

<エラー内容>

PHPでMySQLに接続できていないか、確認のため下記URL入力。

URL入力:
  https://YYY/storelocator.php

ブラウザに表示されるエラー:
  Warning: mysql_connect(): No such file or directory in home/YYY/app/webroot/storelocator.php on line 12
  Not connected : No such file or directory

該当のソースコード

「phpsqlsearch_dbinfo.php」(データベース接続情報)を、「storelocator.php」に取り込んでデータベースに接続しに行くのですが、接続できずエラーになります。
  ※上記両方のphpとも、webrootフォルダ下に設置しています。
   (さくらレンタルサーバー、PHP 5.6.40、でサイトを作り実行)

<設定内容>

usernameをhoge,passwordをfuga,database名をsampledb とします。

上記本文説明とおり、
■phpsqlsearch_dbinfo.phpを

<?php
$username="hoge";
$password="fuga";
$database="hoge-sampledb";
?>

  ※上記本文説明例
  <?php
  $username="username";
  $password="password";
  $database="username-databaseName";
  ?>

■storelocator.phpは説明本文例そのままで、

<?php
require("phpsqlsearch_dbinfo.php");
// Get parameters from URL
$center_lat = $_GET["lat"];
$center_lng = $_GET["lng"];
$radius = $_GET["radius"];
// Start XML file, create parent node
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);
// Opens a connection to a mySQL server
**$connection=mysql_connect (localhost, $username, $password);//←12行目
if (!$connection) {
  die("Not connected : " . mysql_error());
}**
// Set the active mySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ("Can\'t use db : " . mysql_error());
}
// Search the rows in the markers table
$query = sprintf("SELECT id, name, address, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($center_lng),
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($radius));
$result = mysql_query($query);
$result = mysql_query($query);
if (!$result) {
  die("Invalid query: " . mysql_error());
}
header("Content-type: text/xml");
// Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->createElement("marker");
  $newnode = $parnode->appendChild($node);
  $newnode->setAttribute("id", $row['id']);
  $newnode->setAttribute("name", $row['name']);
  $newnode->setAttribute("address", $row['address']);
  $newnode->setAttribute("lat", $row['lat']);
  $newnode->setAttribute("lng", $row['lng']);
  $newnode->setAttribute("distance", $row['distance']);
}
echo $dom->saveXML();
?>

試したこと

■phpsqlsearch_dbinfo.phpの$databaseを変更しましたが、結果は同じでした。

<?php
$username="hoge";
$password="fuga";
$database="sampledb";
?>

■storelocator.phpの12行目のlocalhostを'localhost'に変更しましたが、結果は同じでした。

<?php
require("phpsqlsearch_dbinfo.php");

// Opens a connection to a mySQL server
**$connection=mysql_connect ('localhost', $username, $password);//←12行目
if (!$connection) {
  die("Not connected : " . mysql_error());
}**
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/04/08 21:10

    直接関係はないかもしれませんが、mysql_*の関数はPHP5.5で非推奨となりPHP7では削除された機能です。
    https://www.php.net/manual/ja/function.mysql-connect.php
    現在のPHPのバージョンは幾つでしょうか?
    mysqli_*への書き換えもありますが、PDOのほうがベターです。

    キャンセル

  • dreamers

    2019/04/08 21:23 編集

    PHP 5.6.40 MySQL 5.7 です。
    参考サイトの「https://developers.google.com/maps/solutions/store-locator/clothing-store-locator」の更新日が「最終更新日: 2月 28, 2019」とあり、使われているプログラム内容のバージョンは最新と思いこんでました。
    確認してみます。
    (PHP 5.6.40なので、何とか、mysql_*の関数もつかえるのかな?)
    ありがとうございました。

    キャンセル

  • m.ts10806

    2019/04/08 21:30 編集

    Google提示のものとはいえあくまで一番正しいのはPHPマニュアルです。ロジックのみ注視して中身のコード仕様が古いとかよくあります。
    phpのバージョン確認については
    phpinfo(); 実行してみてください。
    キーとなるのはPHPのバージョンです。
    ただ、セキュリティ上の理由でmysql_*は使わない方が良いです。
    関連質問:https://teratail.com/questions/59503
    ※そもそもPHP5系最後の5.6もサポート終了しているのでphpのバージョンも社内利用のみとか、保守案件以外ではPHP7.1以降を使うべきです。

    キャンセル

回答 2

+1

このエラーはMySQLに接続する際によくみかけるものです。基本的には、UNIXソケットのファイル名が見つからないというエラーです。

そもそも、さくらのレンタルサーバーで、MySQLのホストは localhost でよいのでしょうか。以下の質問の回答を読むと、違うホストのように見えますが。

PHP - さくらレンタルサーバー上でのPHP処理でmySQLにPDO接続できない。|teratail

レンタルサーバー側の設定をマニュアル等で確認することをお勧めします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/08 22:10

    ありがとうございます。確認してみます。

    キャンセル

  • 2019/04/09 18:48

    mts10806 さんが指摘された古いmysql_*の関数をmysqli_*関数を使うと、問題解消されたみたいです。
    (mts10806 さんごめんなさい、おすすめのPDOよりmysqliのほうがわかりやすかったので、、、今後PDOも勉強しようと思います)

    ただ、あらたにエラーが出て、https://teratail.com/questions/183624?modal=q-comp で質問しています。

    キャンセル

checkベストアンサー

0

レンタルサーバーなのでホスト外部にありますよね。
localhostではないことは明らかだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る