JavaScript를 MySQL과 연결할 수 있습니까?


113

JavaScript를 MySQL과 연결할 수 있습니까? 그렇다면 어떻게?


아니오, 브라우저의 JavaScript에 대해 이야기하지 않는 한.
Luca Matteis

2
서버 측 JavaScript (예 : Rhino를 통해)는 어떻습니까? 데이터베이스에 연결할 수 있습니까?
Joand

7
또는 Node.js를은 잘 작동합니다
가브리엘 공정을

1
모두 틀렸으므로이 페이지의 모든 답변을 무시하십시오. 실제로 할 수 있습니다. 참조 developer.chrome.com/apps/app_network
Pacerier

받아 들여진 대답은 명백히 잘못되었습니다 (2010 년에도 마찬가지였습니다). 정답 입니다.
TJ Crowder

답변:


26

아니요, JavaScript는 MySQL에 직접 연결할 수 없습니다. 그러나 JS와 PHP를 혼합하여 그렇게 할 수 있습니다.

JavaScript는 클라이언트 측 언어이며 MySQL 데이터베이스는 서버에서 실행됩니다.


87
작은 참고 사항 : JavaScript가 클라이언트 측에서 실행된다는 사실은 데이터베이스 서버에 연결할 수 없다는 사실과 관련이 없습니다. 향후 버전의 언어가 원격 데이터베이스에 액세스하기 위해 API를 추가 할 가능성은 매우 높지만 가능성은 거의 없습니다.
Lucas Pottersky 2011-06-01

3
그래도 "JS와 PHP의 혼합"이라고 부르지 않을 것입니다. 여러분이 할 수있는 일은 PHP 코드가 미리 MySQL에서 가져온 JavaScript 코드 / 데이터 (예 : json)를 생성하도록하는 것입니다. 또는 서버에서 PHP를 사용하여 http (json / REST / SOAP / ... whatever) 인터페이스를 제공하여 PHP 코드가 MySQL에서 검색하는 데이터에 액세스 할 수 있습니다.이 http 인터페이스는 주로 어디서나 실행되는 JavaScript 코드에 의해 호출 될 수 있습니다. brwoser. 오늘 현재, JavaScript가 클라이언트 측이라고 말하는 것은 더 이상 최신이 아닙니다. 예를 들어 Node.js를 확인하십시오.
Henning

14
"JavaScript는 클라이언트 측 언어입니다."반드시 그런 것은 아닙니다. Java 만큼은 아닙니다.
LeeGee 2010

2
새 버전의 mysql 5.7에서 httpclient는 http 플러그인을 사용하여 mysql 데이터베이스와 직접 통신 할 수 있습니다 (mysql 5.7 용으로 빌드 됨)
Atul Chaudhary 2014 년

귀하의 사이트에 액세스하는 모든 브라우저가 MySQL 서버에 직접 액세스하는 자바 스크립트 파일을 로컬로 보유하는 것이 보안 위험이 아닐까요?
Vassilis

85

클라이언트 측 JavaScript는 일종의 브리지 없이는 MySQL에 액세스 할 수 없습니다. 그러나 JavaScript가 클라이언트 측 언어라는 위의 굵은 문장은 올바르지 않습니다 .JavaScript는 Node.js와 마찬가지로 클라이언트 측과 서버 측에서 실행할 수 있습니다.

Node.js는 https://github.com/sidorares/node-mysql2 와 같은 것을 통해 MySQL에 액세스 할 수 있습니다.

Socket.IO를 사용하여 무언가를 개발할 수도 있습니다.

클라이언트 측 JS 앱이 MySQL에 액세스 할 수 있는지 물어 보려고 했습니까? 그러한 라이브러리가 있는지 확실하지 않지만 가능합니다.

편집 : 작성 이후로 이제 MySQL 클러스터가 있습니다 .

Node.js 용 MySQL Cluster JavaScript Driver는 마치 JavaScript 코드에서 직접 호출하여 데이터를 읽고 쓸 수있는 커넥터입니다. 데이터 노드에 직접 액세스하기 때문에 MySQL 서버를 통과 할 때 추가 대기 시간이 없으며 JavaScript 코드 // 개체에서 SQL 작업으로 변환해야합니다. 어떤 이유로 MySQL 서버를 통과하는 것을 선호한다면 (예를 들어 InnoDB에 테이블을 저장하는 경우) 구성 할 수 있습니다.


53

JavaScript를 사용하여 MySQL 데이터베이스에 연결하려는 경우 Node.js와 mysql 이라는 라이브러리를 사용할 수 있습니다 . 쿼리를 생성하고 레지스터 배열로 결과를 얻을 수 있습니다. 시도해보고 싶다면 내 프로젝트 생성기 를 사용하여 백엔드를 만들고 연결할 데이터베이스로 MySQL 을 선택할 수 있습니다. 그런 다음 새 REST API 또는 GraphQL 엔드 포인트를 전면에 노출 하고 MySQL 데이터베이스 작업을 시작하면됩니다.


NOSTALGIA가 남긴 오래된 답변

그때

질문을 이해하고 내가 틀렸다면 정정하기 때문에 클라이언트 측에서만 JavaScript를 사용하는 클래식 서버 모델을 참조합니다. 이 클래식 모델에서 LAMP 서버 (Linux, Apache, MySQL, PHP)에서 데이터베이스와 접촉하는 언어는 PHP 였으므로 데이터베이스에 데이터를 요청하려면 PHP 스크립트를 작성 하고 반환 데이터를 클라이언트에 에코 해야합니다. 기본적으로 물리적 기계에 따른 언어 분포는 다음과 같습니다.

  1. 서버 측 : PHP 및 MySQL.
  2. 클라이언트 측 : HTML / CSS 및 JavaScript.

이것은 다음과 같은 기능이있는 MVC 모델 (모델,보기, 컨트롤러)에 응답했습니다.

  1. 모델 : 모델은 데이터,이 경우 변수를 관리하거나 저장된 데이터에 액세스하는 PHP 스크립트 (이 경우 MySQL 데이터베이스)를 처리하고이를 JSON 데이터로 클라이언트에 보냅니다.
  2. 보기 : 보기는 우리가 보는 것이며 모델과 완전히 독립적이어야합니다. 모델에 포함 된 데이터 만 표시하면되지만 관련 데이터가 없어야합니다. 이 경우보기는 HTML 및 CSS를 사용합니다. 보기의 기본 구조를 만드는 HTML과이 기본 구조에 모양을 부여하는 CSS.
  3. 컨트롤러 : 컨트롤러는 모델과 뷰 사이의 인터페이스입니다. 이 경우 사용되는 언어는 JavaScript이며 모델이 JSON 패키지로 전송하는 데이터를 가져와 HTML 구조를 제공하는 컨테이너에 넣습니다. 컨트롤러가 모델과 상호 작용하는 방식은 AJAX 를 사용하는 것 입니다. GETPOST 메서드를 사용 하여 서버 측에서 PHP 스크립트를 호출하고 서버에서 반환 된 데이터를 포착합니다.

컨트롤러의 경우 HTML 구조 (DOM)를 제어하기위한 "저수준"라이브러리 인 jQuery 와 같은 흥미로운 도구가 있으며 , 그 다음에 는 서로 다른 연결 관찰자를 생성 할 수있는 Knockout.js 와 같은 새롭고 고급 수준의 도구가 있습니다. 이벤트가 발생할 때 DOM 요소를 업데이트합니다. 비슷한 방식으로 작동하지만 완전한 환경 인 것처럼 보이는 Google의 Angular.js 도 있습니다. 그중 하나를 선택하는 데 도움이되도록 Knockout 대 Angular.jsKnockout.js 대 Angular.js 두 도구에 대한 두 가지 훌륭한 분석이 있습니다. 나는 아직도 읽고있다. 그들이 당신을 돕길 바랍니다.

지금

Node.js를 기반으로하는 최신 서버에서는 모든 것에 JavaScript를 사용합니다. Node.js는 Google V8, Chrome JavaScript 엔진에서 작동하는 많은 라이브러리가있는 JavaScript 환경입니다. 이러한 새 서버를 사용하는 방법은 다음과 같습니다.

  1. Node.jsExpress : 서버가 구축되는 메인 프레임. 몇 줄의 코드로 서버를 만들거나 Express와 같은 라이브러리를 사용하여 서버를 더 쉽게 만들 수 있습니다. Node.js 및 Express를 사용하면 클라이언트에서 서버에 대한 청원을 관리하고 적절한 페이지로 응답 할 것입니다.
  2. Jade : 페이지를 만들기 위해 우리는 HTML을 작성하는 동안 웹 페이지를 작성할 수있는 템플릿 언어 (이 경우 Jade)를 사용합니다 (약간의 시간이 걸리지 만 배우기 쉽습니다). 그런 다음 클라이언트의 청원에 응답하는 서버 코드에서 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와 그 환경에 대한 훌륭한 짧은 튜토리얼로 가득합니다. 시도해 볼 가치가 있습니다. 그리고 때때로 할인을하십시오.
  • Code School : 클라이언트 측을 테스트하는 데 도움이되는 Chrome 개발자 도구에 대한 매우 흥미로운 무료 과정입니다.
  • Codecademy : HTML, CSS, JavaScript, jQuery 및 PHP에 대한 무료 교육 과정을 통해 온라인 예제를 따라갈 수 있습니다.
  • 10gen 교육 : MongoDB에 대해 알아야 할 모든 것을 다른 언어에 대한 자습서로 제공합니다.
  • W3Schools : 여기에는이 모든 것에 대한 튜토리얼이 있으며 정말 유용한 숏 코드 예제가 많기 때문에 참조 장소로 사용할 수 있습니다.
  • Udacity : 웹 개발에 대한 몇 가지 흥미로운 주제와 내가 선호하는 JavaScript를 사용한 3D 그래픽을위한 놀라운 WebGL 과정과 함께 다양한 주제에 대한 무료 비디오 코스가있는 곳입니다.

시작하는 데 도움이 되었기를 바랍니다.

즐기세요!


역학을 설명하는 좋은 자세한 답변.
Duane

감사합니다 :) 문제를 해결하기 위해 답변 끝에 업데이트를 추가했습니다. "mysql"이라는 라이브러리와 함께 노드 서버를 사용할 수 있으며, 새 API 프로젝트를 시작하는 데 사용할 수있는 내가 만든 API 생성기에 대한 링크를 추가했습니다. 도움이되기를 바랍니다.
Timbergus

다시 "그때": 서버 측에서 사용 된 JavaScript는 Netscape Enterprise Server에 포함 된 1995 년으로 거슬러 올라갑니다. 마이크로 소프트는 곧 IIS 서버에 "JScript"를 넣었습니다. 서버의 JavaScript는 원격으로 새로운 것이 아닙니다.
TJ Crowder

이 답변의 상단에 최신 정보가 있거나 오래된 오래된 정보를 삭제하면 좋을 것 같습니다. 또한 약간 장황하고 특정 언어에 중점을 둡니다. 짧은 대답은 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와 같은 서버 측 언어를 사용하여 데이터베이스에 연결합니다.


Javascript (클라이언트 측, 브라우저 형식)는 서버에서 실행되는 서버 측 기술 (Apache, Nginx, PHP, NodeJS 등)과 연결하기 위해 매일 사용됩니다. 서버 / 클라이언트의 정의 자체는 그들 사이의 "분할"을 극복 할 수 있어야합니다.
jeteon

6

예? 유성을보세요. 연결:

http://meteor.com/screencasthttp://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

4

환경에 따라 Rhino를 사용하여이 작업을 수행 할 수 있습니다 . Rhino 웹 사이트를 참조하십시오 . 이를 통해 JavaScript 내에서 모든 Java 라이브러리에 액세스 할 수 있습니다.


4

예. MySQL 용 HTTP 플러그인이 있습니다.

http://blog.ulf-wendel.de/2014/mysql-5-7-http-plugin-mysql/

나는 지금 그것에 대해 인터넷 검색을하고 있어이 stackoverflow 질문으로 이어졌습니다. 현재 또는 가까운 장래에 MySQL 데이터베이스를 AJAX 할 수 있어야합니다 (프로덕션 준비가되지 않았다고 주장함).


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

@Dragas-맞습니다. javascript에는 mysql 데이터베이스에 연결하는 기본 방법이 없으므로 mysql dll은 서버 측에서 호스팅되므로 AJAX 호출이됩니다. 그것은 또한 당신이 포트 3306에 방화벽을 사용하는 경우, 당신은 mysqljs.com에서 들어오는 연결이를 열 필요가 있음을 의미
Fiach 리드에게


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)를 내 보내야합니다. 절대로 "_GET"에서 SQL 코드를 가져 오십시오.이를 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 쿼리는 어디에 있습니까?
Michael

@Michael : 좋은 질문입니다.
Connor Gurney

-1

귀하의 질문을 이해했습니다. 코드 내에서 DB 연결을 열 수있는 dot.net 및 java와 같은 언어와 혼동하고 있다고 생각합니다. 아니요, JavaScript는 클라이언트 측 스크립팅 언어 (Exception Node.js)이므로 MySQL에 직접 연결할 수 없습니다. 데이터에 액세스하려면 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.

이것은 질문과 관련된 0 %입니다. 질문의 작성자는 Javascript에 대해 매우 구체적입니다.
geekgugi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.