JavaScriptはMySQLと接続できますか?


113

JavaScriptはMySQLと接続できますか?もしそうなら、どうですか?


いいえ、ブラウザーのJavaScriptについて話していない場合を除きます。
Luca Matteis、2010年

2
サーバーサイドJavaScript(Rhinoなど)はどうですか?データベースに接続できますか?
Joand、2012

7
または、Node.jsも同様に機能します
Gabriel Fair

1
このページの回答はすべて間違っているため、無視してください。 実際、それは可能です。developer.chrome.com/apps/app_networkを
Pacerier

受け入れられた答えはまったく間違っています(そして2010年もそうでした)。この答えは正しいです。
TJクラウダー2017

回答:


26

いいえ、JavaScriptはMySQLに直接接続できません。ただし、JSとPHPを混在させることができます。

JavaScriptはクライアント側の言語であり、MySQLデータベースはサーバーで実行されます


87
小さな注意:JavaScriptがクライアント側で実行されるという事実は、データベースサーバーに接続できないという事実とは何の関係もありません。この言語の将来のバージョンで、リモートデータベースにアクセスするためのAPIが追加される可能性は非常に高くなります(ただし、ほとんどありません)。
Lucas Pottersky、2011年

3
ただし、これを「JSとPHPを混在させる」とは呼びません。あなたがするかもしれないことは、MySQLから事前に取得したJavaScriptコード/データ(jsonなど)をPHPコードに生成させることです。または、サーバーでPHPを使用して、http(json / REST / SOAP / ...何でも)インターフェースを提供して、phpコードがMySQLから取得するデータにアクセスすることができます。ブルソー。今日の時点で、JavaScriptがクライアント側であると言うことはもはや現在ではありません-たとえばNode.jsを確認してください。
ヘニング2012

14
「JavaScriptはクライアント側の言語です」必ずしもそうではありません。Javaにすぎません。
LeeGee

2
mysql 5.7の新しいバージョンでは、httpclientはhttpプラグインを使用してmysqlデータベースと直接通信できます(mysql 5.7用にビルド)
Atul Chaudhary 2014年

MySQLサーバーに直接アクセスするjavascriptファイルをローカルにアクセスすることは、サイトにアクセスするすべてのブラウザにとってなんらかのセキュリティリスクではないでしょうか。
Vassilis 2018

85

クライアント側のJavaScriptは、なんらかのブリッジがないとMySQLにアクセスできません。しかし、JavaScriptは単なるクライアントサイド言語であるという上記の太字のステートメントは正しくありません。JavaScriptは、Node.jsと同様に、クライアントサイドとサーバーサイドで実行できます。

Node.jsは、https://github.com/sidorares/node-mysql2のようなものを介してMySQLにアクセスできます

Socket.IOを使用して何かを開発することもできます

クライアント側のJSアプリがMySQLにアクセスできるかどうかを確認するつもりですか?そのようなライブラリが存在するかどうかはわかりませんが、可能です。

編集:執筆以来、現在MySQL Clusterがあります

Node.js用のMySQL Cluster JavaScriptドライバーは、それがどのようなものであるかを示しています。これは、JavaScriptコードから直接呼び出してデータを読み書きできるコネクターです。データノードに直接アクセスするため、MySQLサーバーを通過することによる余分なレイテンシはなく、JavaScriptコード//オブジェクトからSQL操作に変換する必要があります。何らかの理由で、MySQLサーバーを通過したい場合(たとえば、テーブルをInnoDBに格納している場合)、それを構成できます。


53

JavaScriptを使用してMySQLデータベースに接続する場合は、Node.jsとmysqlというライブラリを使用できます。クエリを作成し、結果をレジスターの配列として取得できます。試してみたい場合は、私のプロジェクトジェネレーターを使用してバックエンドを作成し、接続するデータベースとしてMySQLを選択します。次に、新しいREST APIまたはGraphQLエンドポイントを前面に表示して、MySQLデータベースの操作を開始します。


ノスタルジアによる古い回答

その後

私は質問を理解し、私が間違っている場合は修正するので、クライアント側でのみJavaScriptを使用する従来のサーバーモデルを指します。この古典的なモデルでは、LAMPサーバー(Linux、Apache、MySQL、PHP)では、データベースと接触する言語はPHPでした。そのため、データベースにデータをリクエストするには、PHPスクリプトを記述し、返されたデータをクライアントにエコーする必要があります。基本的に、物理マシンによる言語の分布は次のとおりです。

  1. サーバー側: PHPおよびMySQL。
  2. クライアント側: HTML / CSSおよびJavaScript。

これは、次の機能を備えたMVCモデル(モデル、ビュー、コントローラー)に答えました。

  1. モデル:モデルは、データを処理するものであり、この場合、変数を管理する、またはこの場合はMySQLデータベースに格納されているデータにアクセスし、JSONデータとしてクライアントに送信するPHPスクリプトです。
  2. VIEW:ビューは私たちが見るものであり、モデルから完全に独立している必要があります。モデルに含まれるデータを表示する必要があるだけですが、それに関連するデータがあってはなりません。この場合、ビューはHTMLとCSSを使用します。ビューの基本構造を作成するHTML、およびこの基本構造に形状を与えるCSS。
  3. コントローラー:コントローラーは、モデルとビューの間のインターフェースです。この場合、使用される言語はJavaScriptで、モデルがJSONパッケージとして送信したデータを受け取り、HTML構造を提供するコンテナー内に配置します。コントローラーがモデルと対話する方法は、AJAXを使用することです。GETメソッドとPOSTメソッドを使用して、サーバー側でPHPスクリプトを呼び出し、サーバーから返されたデータをキャッチします。

コントローラには、HTML構造(DOM)を制御するための「低レベル」ライブラリとしてjQueryなどの非常に興味深いツールがあり、次に、Knockout.jsとして新しく、より高レベルなツールを使用して、さまざまな方法で接続するオブザーバを作成できます。イベント発生時にそれらを更新するDOM要素。同様に機能するが完全な環境のように見えるGoogleのAngular.jsもあります。それらの中から選択するのを助けるために、2つのツールの2つの優れた分析があります。KnockoutAngular.jsKnockout.jsとAngular.jsです。私はまだ読んでいます。彼らがあなたを助けることを願っています。

Node.jsに基づく最新のサーバーでは、すべてにJavaScriptを使用します。Node.jsは、Google V8、Chrome JavaScriptエンジンで動作する多くのライブラリを備えたJavaScript環境です。これらの新しいサーバーでの作業方法は次のとおりです。

  1. Node.jsExpressサーバーが構築されているメインフレーム。数行のコードでサーバーを作成することも、Expressなどのライブラリを使用してサーバーをさらに簡単に作成することもできます。Node.jsとExpressを使用して、クライアントからサーバーへの請願を管理し、適切なページで回答します。
  2. Jadeページを作成するために、テンプレート言語(この場合はJade)を使用しますこれにより、HTMLを作成しているときにWebページを作成できますが、違いがあります(少し時間がかかりますが、簡単に習得できます)。次に、クライアントの請願に答えるためのサーバーのコードで、Jadeコードを「実際の」HTMLコードにレンダリングする必要があります。
  3. スタイラス Jadeに似ていますが、CSS用です。この場合、ミドルウェア機能を使用して、スタイラスファイルをページの実際のCSSファイルに変換します。

次に、NPM(Node.jsパッケージマネージャー)を使用してインストールできる多くのパッケージを用意し、それらを必要なNode.jsサーバーで直接使用します(Node.jsを学びたい人は、この初心者向けチュートリアルを試してください概要については)。そして、これらのパッケージの中には、データベースにアクセスするためのパッケージがいくつかあります。これを使用すると、サーバーサイドでJavaScriptを使用してMy SQLデータベースにアクセスできます。

しかし、Node.jsで作業する場合にできる最善の方法は、JSONファイルに基づいて、MongoDBなどの新しいNoSQLデータベースを使用することです。MySQLのようなテーブルを格納する代わりに、JSON構造でデータを格納するため、最大のサイズの巨大なテーブルを作成する代わりに、長い数値ベクトルのように各構造内に異なるデータを配置できます。

この簡単な説明がお役に立てば幸いです。これについて詳しく知りたい場合は、次のリソースをご利用ください。

  • Egghead:このサイトには、JavaScriptとその環境に関する素晴らしい短いチュートリアルがたくさんあります。試してみる価値があります。そして、時々割引を行います。
  • コードスクール:Chromeデベロッパーツールに関する無料の非常に興味深いコースで、クライアント側のテストに役立ちます。
  • Codecademy:HTML、CSS、JavaScript、jQuery、およびPHPに関する無料のコースがあり、オンラインのサンプルを使用できます。
  • 10gen Education:さまざまな言語のチュートリアルで、MongoDBについて知っておく必要があるすべての情報が含まれています。
  • W3Schools:これにはすべてのチュートリアルがあり、参考になる場所として使用できるショートコードの例がたくさんあるので参考にできます。
  • Udacity:さまざまなテーマに関する無料のビデオコースがあり、Web開発に関する興味深いトピックがいくつかある場所です。JavaScriptを使用した3Dグラフィックス向けのすばらしいWebGLコースです。

それがあなたが始めるのに役立つことを願っています。

楽しんで!


メカニズムを説明する素敵な詳細な回答。
Duane 2017年

ありがとう:)問題を解決するために、回答の最後に更新を追加しました。「mysql」というライブラリーでノードサーバーを使用できます。作成したAPIジェネレーターへのリンクを追加しました。これを使用して、新しいAPIプロジェクトを開始できます。それが役に立てば幸い。
Timbergus 2017年

「それから」について:サーバーサイドで使用されていたJavaScriptは、それがNetscape Enterprise Serverに含まれていた1995年に遡ります。Microsoftはその後すぐにIISサーバーに「JScript」を配置しました。サーバー上のJavaScriptは、リモートでは新しいものではありません。
TJクラウダー2017

この回答の一番上に最新の情報があるか、古い古い情報を削除するのが良いと思います。また、これは少し冗長で、特定の言語に焦点を当てています。簡単な答えは、JavaScriptを使用してNode.JS(または他のサーバー側ランタイム環境)からMySQLデータベースに直接接続できますが、意図的なブラウザーのセキュリティのため、ブラウザーからは接続できないということです。
Caltor

8

方程式にPHPなどを追加する必要があると思います。PHPを使用してデータベースを操作すると、JavaScriptを使用してAJAX呼び出しを行うことができます。


8

少し遅れましたが、最近、MySql 5.7がHTTPプラグインを取得し、ユーザーがmysqlに直接接続できるようになったことがわかりました。

mysql 5.7のHttpクライアントを探す


7

簡単な答えは次のとおりです。

JavaScriptはブラウザーで実行されるクライアント側の言語(node.jsにかかわらず)であり、MySQLはサーバーで実行されるサーバー側のテクノロジーです。

つまり、通常、ASP.NETやPHPなどのサーバー側言語を使用してデータベースに接続します。


サーバーサイドで実行されているサーバーサイドテクノロジー(Apache、Nginx、PHP、NodeJSなど)に接続するために、Javascript(クライアントサイドではブラウザ形式)が毎日使用されます。サーバー/クライアントのまさにその定義は、それらの間の「分割」が克服可能であることを要求します。
ジェテオン2015

6

はい?流星を見てください。リンク:

http://meteor.com/screencastおよびhttp://net.tutsplus.com/tutorials/javascript-ajax/whats-this-meteor-thing/

どうすればいいのか分かりません。しかし、Nettuts +はこのことをjavascript-ajaxセクションに入れました。おそらく魔法が起こります。

次のように、JSを使用してMongoDBに接続および挿入する方法も示します。

Products.insert({Name : "Hammer", Price : 4.50, InStock : true});
Products.insert({Name : "Wrench", Price : 2.70, InStock : true});
Products.insert({Name : "Screw Driver", Price : 3.00, InStock : false});
Products.insert({Name : "Drill", Price : 5.25, InStock : true});

1
「別のAPIを実装するサーバー側のデータベースドライバーやクライアント側のキャッシュを提供することで、MongoDBを別のデータベースに置き換えることができます。mongo-livedataは、そのようなプロジェクトの出発点として最適です。」- docs.meteor.com
LeeGee

MeteorはNode.jsを使用して作成されたので、この回答によって新しいものが追加されたり、変更が加えられたりすることはないと思います。あなただけのクライアントとサーバーをカバーするフレームワークがあります。
Caltor



2

通常、MySQLに接続するには、PHPなどのサーバー側スクリプト言語が必要ですが、簡単なモックアップを行っている場合は、http://www.mysqljs.comを使用して、次のコードを使用してJavaScriptからMySQLに接続できます続く:

MySql.Execute(
    "mysql.yourhost.com", 
    "username", 
    "password", 
    "database", 
    "select * from Users", 
    function (data) {
        console.log(data)
});

これはMySqlにアクセスする安全な方法ではなく、プライベートデモ、またはPhonegap iOSアプリ内などのエンドユーザーがソースコードにアクセスできないシナリオにのみ適していることを言及する必要があります。


迅速な検査の後、このポーズ脅威のように述べているスクリプトに6行目で見られるように、データベースの認証情報を盗むへvar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas

@ドラガス-そうです。javascriptにはmysqlデータベースに接続するネイティブの方法がないため、mysql dllはサーバー側でホストされるため、AJAX呼び出しになります。また、ポート3306でファイアウォールを使用している場合、mysqljs.comからの着信接続に対してこれを開く必要があることも意味します
Fiach Reid


1

はい、できます。MySQLコネクタは接続にTCPを使用し、JSにはWebsocketと呼ばれる少し変更されたバージョンのTCPクライアントがあります。ただし、websocketを使用してMySQLサーバーに直接接続することはできません。websocketとmysqlの間にいくつかのサードパーティのブリッジが必要になります。それはwebsocketからクエリを受信し、それをmysqlに送信し、結果を応答し、JSに再送信します。

これは、websocket-sharpライブラリを使用してC#で記述された私のブリッジの例です。

class JSQLBridge : WebSocketBehavior
{
    MySqlConnection conn;

    protected override void OnMessage(MessageEventArgs e)
    {
        if (conn == null)
        {
            try
            {
                conn = new MySqlConnection(e.Data);
                conn.Open();
            }
            catch (Exception exc)
            {
                Send(exc.Message);
            }
        }
        else
        {
            try
            {
                MySqlCommand cmd = new MySqlCommand(e.Data, conn);
                cmd.ExecuteNonQuery();
                Send("success");
            }
            catch (Exception exc)
            {
                Send(exc.Message);
            }
        }
    }

    protected override void OnClose(CloseEventArgs e)
    {
        if (conn != null)
            conn.Close();
    }
}

JS側:

var ws = new WebSocket("ws://localhost/");

ws.send("server=localhost;user=root;database=mydb;");

ws.send("select * from users");

0

番号。

PHPでラッパーを作成し、返されたデータを(おそらくJsonとして)エクスポートする必要があります。これはSQLインジェクションと呼ばれるため、決して "_GET" SQLコードから取得しないでください(これを知っている人はデータベースを完全に制御できます)。

これは私が書いた例です:

function getJsonData()
{
        global $db;
        if (!$db->isConnected()) {
               return "Not connected";
        }
        $db->query("SELECT * FROM entries");
        $values = array();
        while( $v = $db->fetchAssoc()){
                $values[] = $v;
        }
        return json_encode($values);    
}

switch (@$_GET["cmd"]){
        case 'data':
                print getJsonData();
                exit;

        default:
                print getMainScreen();
                exit; 
}

SQLインジェクションについて学んでください。


0

Javaアプレットを介してJavaScriptからMySQLに接続できます。JAVAアプレットは、MySQLに接続できるようにするMySQLのJDBCドライバーを埋め込みます。

リモートのMySQLサーバー(アプレットをダウンロードしたサーバー以外)に接続する場合は、ユーザーにアプレットへの拡張アクセス許可を付与するよう依頼する必要があることに注意してください。デフォルトでは、アプレットはダウンロード元のサーバーにのみ接続できます。


0

MySQLにロックされていない場合は、PostgreSQLに切り替えることができます。データベース内のJavaScriptプロシージャ(PL / V8)をサポートします。それは非常に高速で強力です。この投稿をチェックしてください。


0

JavaScriptはDBに直接接続して必要なデータを取得することはできませんが、AJAXを使用できます。サーバーへのAJAXリクエストを簡単に行うには、jQuery JSフレームワークhttp://jquery.comを使用できます。ここに小さな例があります

JS:

jQuery.ajax({
type: "GET",
dataType: "json",
url: '/ajax/usergroups/filters.php',
data: "controller=" + controller + "&view=" + view,
success: function(json)
{
    alert(json.first);
    alert(json.second);
});

PHP:

$out = array(); 

// mysql connection and select query
$conn = new mysqli($servername, $username, $password, $dbname);


try {
  die("Connection failed: " . $conn->connect_error);

  $sql = "SELECT * FROM [table_name] WHERE condition = [conditions]";
  $result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    $out[] = [
       'field1' => $row["field1"],
       'field2' => $row["field2"]
    ];
  }
} else {
  echo "0 results";
}

} catch(Exception $e) {
  echo "Error: " . $e->getMessage();
}
    echo json_encode($out);

1
この例のMySQLクエリはどこにありますか?
マイケル

@マイケル:素晴らしい質問です。
Connor Gurney 2017年

-1

あなたの質問を理解しました。コード内でDB接続を開くことができるdot.netやjavaなどの言語と混同していると思います。いいえ、JavaScriptはクライアント側のスクリプト言語であるため、MySQLに直接接続できません(例外Node.js)。データにアクセスするには、RESTful APIのような中間層が必要です。


-3

PHPファイルを使用してmysql接続を追加できます。以下はPHPファイルの例です。

<?php
   $con = mysql_connect('localhost:3306', 'dbusername', 'dbpsw');
   mysql_select_db("(dbname)", $con);

   $sql="SELECT * FROM table_name";

   $result = mysql_query($sql);

   echo " <table border='1'>
   <tr>
   <th>Header of Table name</th>
   </tr>";

   while($row = mysql_fetch_array($result))
   {
     echo "<tr>";
     echo "<td>" . $row['(database_column_name)'] . "</td>";
     echo "<td>" . $row['database_column_name'] . "</td>";
     echo "</tr>";
    }
    echo "</table>";
    mysql_close($con);
   ?> }

実際には、それは答えではありません。問題はでしたCan JavaScript connect with MySQL?
Alex.K

これは、尋ねられた質問に関連するゼロパーセントです。質問の著者はJavascriptについて非常に具体的です。
geekgugi 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.