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

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

ただいまの
回答率

89.07%

phpでmysqlのDBのクエリでmysqlではなくMariaDBが呼ばれる

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,615

yamanoharu0129

score 47

いつもお世話になっております。
現在、mySQLのDBに保存したKMLの情報を取得するチュートリアルをやっているのですが、以下のコードの←の部分でエラーが発生して先に進めません。

// Opens a connection to a MySQL server.

$connection = mysql_connect ($server, $username, $password);

if (!$connection) 
{
  die('Not connected : ' . mysql_error());
}
// Sets the active MySQL database.
$db_selected = mysql_select_db($database, $connection);

if (!$db_selected) 
{
  die('Can\'t use db : ' . mysql_error());
}

// Selects all the rows in the markers table.
$query = 'SELECT * FROM "kmltest"';
$result = mysql_query($query);←この部分でエラーが発生している模様

if (!$result) 
{
  die('Invalid query: ' . mysql_error());
}


エラー文は、
『Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"kmltest"' at line 1』
で、mySQLのDBからデータを取得しようとしているのに、MariaDBからデータを取得しようとしている、と捉えたのですが、どの部分を直せばMySQLから取得できるでしょうか?
PHPについて調べていく中で、MySQLからMariaDBに移行してきていて、新しいxamppのバージョンでは、セキュリティのページが消えていたりと初期の設定がし辛くなっていることがわかって、MariaDBに移行せざるを得ないという印象を受けました。
xamppのバージョンアップを試みて、設定が上手くいかなかったので、そのままMySQLを使っているのですが、MariaDBを使わなければならないのでしょうか?
現在のphpのバージョンは、5.6.3で、xasmppのバージョンは5.6.16で、xamppのコントロールパネルのバージョンは、3.2.2です。
ご教授お願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+2

MySQLは2010年にOracle社に買収されました。
MariaDBはOracleのやり方に賛同出来ない人が新しく立ち上げたプロジェクトで、
普通に使う分には両者の違いを意識すること無く使う事が出来ます。

どうしてもMySQLを使いたい場合、XAMPPを諦めましょう。

それはそれとして、SQL文に誤りがあるので、下記を試してみてください。

// 修正前
$query = 'SELECT * FROM "kmltest"';

// 修正後
$query = 'SELECT * FROM kmltest';

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/08/18 12:36

    SQL文を修正して無事解決しました。
    ベストアンサーとさせていただきます。ありがとうございました。

    キャンセル

+2

根本はそこじゃなくて、このエラーです。miyabi-sun様の仰る通り、mariaDBとmysqlは互換性があるので、何も問題ありません。

Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"kmltest"' at line 1

英文はこういうことです。syntaxとは構文のことです。
「SQL構文にエラーが発生しています。1行目に書かれている'"kmltest"'という文章に問題がないか、マニュアルを確認してください」

確認すると、テーブルに括弧を括っていますね。シングルクォートで括るのはSQL構文に挿入する外部からの文字(定数など)であり、SQLを構成する構文そのものにシングルクォートを括ってはいけません。

補足で、カラム名やテーブル名をそのまま表示させたい場合、ダブルクォートで括ります。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/08/17 14:57

    miyabi-sun様、FKM様、返信ありがとうございます。
    miyabi-sun様のおっしゃるとおり訂正したところ、再読み込みするとページのダウンロード画面が出ました。
    ダウンロードして確認したところ、テストでページに表示させていた文字の下に、以下のコードが書かれていました。
    77行目は、$placeNode->setAttribute('id', 'placemark' . $row['id']);という一文です。KMLは出力されているようですが、idだけが取得されてないということでしょうか?また何故いきなりダウンロード画面になるのかわかりません。

    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <br />
    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <br />
    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <br />
    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <br />
    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <br />
    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <br />
    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <br />
    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <br />
    <b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\phpsql_genkml.php</b> on line <b>77</b><br />
    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://earth.google.com/kml/2.1"><Document><Style id="restaurantStyle"><IconStyle id="restaurantIcon"><Icon><href>http://maps.google.com/mapfiles/kml/pal2/icon63.png</href> id="barStyle"><IconStyle id="barIcon"><Icon><href>http://maps.google.com/mapfiles/kml/pal2/icon27.png</href> id="placemark"><name>Pan Africa Market</name><description>1521 1st Ave, Seattle, WA</description><styleUrl>#restaurantStyle</styleUrl><Point><coordinates>-122.340141,47.608940</coordinates></Point></Placemark><Placemark id="placemark"><name>Buddha Thai &amp; Bar</name><description>2222 2nd Ave, Seattle, WA</description><styleUrl>#barStyle</styleUrl><Point><coordinates>-122.344391,47.613590</coordinates></Point></Placemark><Placemark id="placemark"><name>The Melting Pot</name><description>14 Mercer St, Seattle, WA</description><styleUrl>#restaurantStyle</styleUrl><Point><coordinates>-122.356445,47.624561</coordinates></Point></Placemark><Placemark id="placemark"><name>Ipanema Grill</name><description>1225 1st Ave, Seattle, WA</description><styleUrl>#restaurantStyle</styleUrl><Point><coordinates>-122.337654,47.606365</coordinates></Point></Placemark><Placemark id="placemark"><name>Sake House</name><description>2230 1st Ave, Seattle, WA</description><styleUrl>#barStyle</styleUrl><Point><coordinates>-122.345673,47.612823</coordinates></Point></Placemark><Placemark id="placemark"><name>Crab Pot</name><description>1301 Alaskan Way, Seattle, WA</description><styleUrl>#restaurantStyle</styleUrl><Point><coordinates>-122.340363,47.605961</coordinates></Point></Placemark><Placemark id="placemark"><name>Mama's Mexican Kitchen</name><description>2234 2nd Ave, Seattle, WA</description><styleUrl>#barStyle</styleUrl><Point><coordinates>-122.345467,47.613976</coordinates></Point></Placemark><Placemark id="placemark"><name>Wingdome</name><description>1416 E Olive Way, Seattle, WA</description><styleUrl>#barStyle</styleUrl><Point><coordinates>-122.326584,47.617214</coordinates></Point></Placemark><Placemark id="placemark"><name>Piroshky Piroshky</name><description>1908 Pike pl, Seattle, WA</description><styleUrl>#restaurantStyle</styleUrl><Point><coordinates>-122.342834,47.610126</coordinates></Point></Placemark></Document></kml>

    キャンセル

  • 2016/08/18 12:35

    上記のphpファイルのエラーですが、引っかかっている行のコード以前のidの指定が、DBではIdに、phpではidになっていたのが原因でした。また、phpを最後まで見直したところ、ダウンロード画面になるのは、
    $kmlOutput = $dom->saveXML();
    という一文があるからだとわかりました。最後までコードをよく見ていなかったせいでした。
    ベストアンサーは、先に回答してくださったmiyabi-san様に付けさせていただきます。回答していただき、ありがとうございました。

    キャンセル

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

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

関連した質問

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