JavaScript có thể kết nối với MySQL không?


113

JavaScript có thể kết nối với MySQL không? Nếu vậy, làm thế nào?


không, trừ khi bạn không nói về JavaScript trong trình duyệt.
Luca Matteis

2
Còn JavaScript phía máy chủ (ví dụ: thông qua Rhino) thì sao? chúng ta có thể kết nối với cơ sở dữ liệu không?
Joand 20/09/12

7
Hoặc Node.js sẽ làm việc tốt
Gabriel Fair

1
Bỏ qua tất cả các câu trả lời trên trang này vì tất cả chúng đều sai. Trong thực tế, nó có thể được thực hiện. Xem developer.chrome.com/apps/app_network
Pacerier

Câu trả lời được chấp nhận là hoàn toàn sai (và cũng là vào năm 2010). Câu trả lời này là chính xác.
TJ Crowder

Câu trả lời:


26

Không, JavaScript không thể kết nối trực tiếp với MySQL. Nhưng bạn có thể kết hợp JS với PHP để làm như vậy.

JavaScript là ngôn ngữ phía máy khách và cơ sở dữ liệu MySQL của bạn sẽ chạy trên máy chủ


87
lưu ý nhỏ: thực tế là JavaScript chạy ở phía máy khách KHÔNG CÓ GÌ để làm với thực tế là nó không thể kết nối với Máy chủ cơ sở dữ liệu. Rất có thể (mặc dù, rất khó xảy ra) rằng một phiên bản ngôn ngữ trong tương lai sẽ thêm các API để truy cập cơ sở dữ liệu từ xa.
Lucas Pottersky

3
Tuy nhiên, tôi sẽ không gọi đó là "trộn JS với PHP". Những gì bạn có thể làm là để PHP Code tạo Mã / Dữ liệu JavaScript (ví dụ: json) mà nó đã lấy trước từ MySQL. Hoặc bạn có thể sử dụng PHP trên máy chủ để cung cấp giao diện http (json / REST / SOAP / ... bất cứ thứ gì) để truy cập dữ liệu mà mã php truy xuất từ ​​MySQL - và giao diện http này có thể được gọi bằng mã JavaScript chạy ở mọi nơi, chủ yếu một kẻ nói bậy. Kể từ ngày hôm nay, việc nói JavaScript là phía máy khách không còn hiện tại nữa - hãy kiểm tra Node.js chẳng hạn.
Henning

14
"JavaScript là ngôn ngữ phía máy khách" Không nhất thiết: không hơn Java.
LeeGee

2
với phiên bản mới của mysql 5,7 httpclient có thể giao tiếp trực tiếp với cơ sở dữ liệu mysql sử dụng http plugin (xây dựng cho mysql 5.7)
Atul Chaudhary

Sẽ không phải là một rủi ro bảo mật nào đó đối với tất cả các trình duyệt truy cập vào trang web của bạn có tệp javascript cục bộ truy cập trực tiếp vào máy chủ MySQL của bạn?
Vassilis

85

JavaScript phía máy khách không thể truy cập MySQL mà không có một số loại cầu nối. Nhưng các tuyên bố in đậm ở trên rằng JavaScript chỉ là ngôn ngữ phía máy khách là không chính xác - JavaScript có thể chạy phía máy khách và phía máy chủ, như với Node.js.

Node.js có thể truy cập MySQL thông qua một cái gì đó như https://github.com/sidorares/node-mysql2

Bạn cũng có thể phát triển thứ gì đó bằng Socket.IO

Ý của bạn là hỏi liệu một ứng dụng JS phía máy khách có thể truy cập MySQL không? Tôi không chắc liệu những thư viện như vậy có tồn tại hay không, nhưng chúng có thể.

CHỈNH SỬA : Kể từ khi viết, bây giờ chúng ta đã có MySQL Cluster :

Trình điều khiển JavaScript cụm MySQL cho Node.js nghe giống như nó - nó là một trình kết nối có thể được gọi trực tiếp từ mã JavaScript của bạn để đọc và ghi dữ liệu của bạn. Vì nó truy cập trực tiếp vào các nút dữ liệu, không có thêm độ trễ khi chuyển qua Máy chủ MySQL và cần phải chuyển đổi từ mã // đối tượng JavaScript thành các hoạt động SQL. Nếu vì lý do nào đó, bạn muốn nó chuyển qua Máy chủ MySQL (ví dụ: nếu bạn đang lưu trữ các bảng trong InnoDB) thì bạn có thể cấu hình nó.


53

Nếu bạn muốn kết nối với cơ sở dữ liệu MySQL bằng JavaScript, bạn có thể sử dụng Node.js và một thư viện có tên là mysql . Bạn có thể tạo truy vấn và nhận kết quả dưới dạng một mảng các thanh ghi. Nếu bạn muốn thử, bạn có thể sử dụng trình tạo dự án của tôi để tạo chương trình phụ trợ và chọn MySQL làm cơ sở dữ liệu để kết nối. Sau đó, chỉ cần hiển thị điểm cuối REST API hoặc GraphQL mới của bạn và bắt đầu làm việc với cơ sở dữ liệu MySQL của bạn.


CÂU TRẢ LỜI CŨ TRÁI BẰNG NOSTALGIA

SAU ĐÓ

Khi tôi hiểu câu hỏi và sửa cho tôi nếu tôi sai, nó đề cập đến mô hình máy chủ cổ điển chỉ với JavaScript ở phía máy khách. Trong mô hình cổ điển này, với ĐÈN máy chủ (Linux, Apache, MySQL, PHP) ngôn ngữ trong tiếp xúc với cơ sở dữ liệu là PHP, như vậy để yêu cầu dữ liệu vào cơ sở dữ liệu bạn cần phải viết PHP kịch bản và tiếng vang dữ liệu trở lại cho khách hàng. Về cơ bản, sự phân bố của các ngôn ngữ theo máy vật lý là:

  1. Phía máy chủ: PHP và MySQL.
  2. Phía khách hàng: HTML / CSS và JavaScript.

Điều này trả lời cho một mô hình MVC (Model, View, Controller) trong đó chúng tôi có chức năng sau:

  1. MÔ HÌNH: Mô hình là những gì xử lý dữ liệu, trong trường hợp này là các tập lệnh PHP quản lý các biến hoặc truy cập dữ liệu được lưu trữ, trong trường hợp này là trong cơ sở dữ liệu MySQL của chúng tôi và gửi nó dưới dạng dữ liệu JSON cho máy khách.
  2. XEM: Chế độ xem là những gì chúng ta nhìn thấy và nó phải hoàn toàn độc lập với mô hình. Nó chỉ cần hiển thị dữ liệu có trong mô hình, nhưng nó không nên có dữ liệu liên quan trên đó. Trong trường hợp này, chế độ xem sử dụng HTML và CSS. HTML để tạo cấu trúc cơ bản của khung nhìn và CSS để tạo hình dạng cho cấu trúc cơ bản này.
  3. BỘ ĐIỀU KHIỂN: Bộ điều khiển là giao diện giữa mô hình của chúng tôi và chế độ xem của chúng tôi. Trong trường hợp này, ngôn ngữ được sử dụng là JavaScript và nó lấy dữ liệu mà mô hình gửi cho chúng tôi dưới dạng gói JSON và đặt nó bên trong các vùng chứa cung cấp cấu trúc HTML. Cách bộ điều khiển tương tác với mô hình là sử dụng AJAX . Chúng tôi sử dụng các phương thức GETPOST để gọi các tập lệnh PHP ở phía máy chủ và để bắt dữ liệu trả về từ máy chủ.

Đối với bộ điều khiển, chúng tôi có các công cụ thực sự thú vị như jQuery , như thư viện "cấp thấp" để kiểm soát cấu trúc HTML (DOM) và sau đó là các công cụ mới, cấp cao hơn như Knockout.js cho phép chúng tôi tạo các trình quan sát kết nối các Các phần tử DOM cập nhật chúng khi sự kiện xảy ra. Ngoài ra còn có Angular.js của Google hoạt động theo cách tương tự, nhưng dường như là một môi trường hoàn chỉnh. Để giúp bạn lựa chọn trong số chúng, ở đây bạn có hai phân tích tuyệt vời về hai công cụ: Knockout so với Angular.jsKnockout.js so với Angular.js . Tôi vẫn đang đọc. Hy vọng họ sẽ giúp bạn.

HIỆN NAY

Trong các máy chủ hiện đại dựa trên Node.js, chúng tôi sử dụng JavaScript cho mọi thứ. Node.js là một môi trường JavaScript với nhiều thư viện hoạt động với Google V8, Chrome JavaScript engine. Cách chúng tôi làm việc với các máy chủ mới này là:

  1. Node.jsExpress : Máy tính lớn nơi máy chủ được xây dựng. Chúng ta có thể tạo một máy chủ với một vài dòng mã hoặc thậm chí sử dụng các thư viện như Express để tạo máy chủ dễ dàng hơn. Với Node.js và Express, chúng tôi sẽ quản lý các kiến ​​nghị tới máy chủ từ các máy khách và sẽ trả lời chúng bằng các trang thích hợp.
  2. Ngọc : Để tạo các trang, chúng tôi sử dụng ngôn ngữ tạo khuôn mẫu, trong trường hợp này là Jade, cho phép chúng tôi viết các trang web như khi chúng tôi viết HTML nhưng có sự khác biệt (mất một chút thời gian nhưng rất dễ học). Sau đó, trong mã của máy chủ để trả lời các kiến ​​nghị của khách hàng, chúng tôi chỉ cần kết xuất mã Jade thành một mã HTML "thực".
  3. Stylus : Tương tự như Jade nhưng dành cho CSS. Trong trường hợp này, chúng tôi sử dụng chức năng phần mềm trung gian để chuyển đổi tệp bút cảm ứng thành tệp CSS thực cho trang của chúng tôi.

Sau đó, chúng tôi có rất nhiều gói mà chúng tôi có thể cài đặt bằng cách sử dụng NPM (trình quản lý gói Node.js) và sử dụng chúng trực tiếp trong máy chủ Node.js của chúng tôi chỉ cần yêu cầu nó (đối với những bạn muốn học Node.js, hãy thử hướng dẫn dành cho người mới bắt đầu này để có cái nhìn tổng quan). Và trong số các gói này, bạn có một số gói để truy cập cơ sở dữ liệu. Bằng cách sử dụng này, bạn có thể sử dụng JavaScript ở phía máy chủ để truy cập cơ sở dữ liệu SQL của tôi.

Nhưng tốt nhất bạn có thể làm nếu định làm việc với Node.js là sử dụng cơ sở dữ liệu NoSQL mới như MongoDB , dựa trên các tệp JSON. Thay vì lưu trữ các bảng như MySQL, nó lưu trữ dữ liệu trong các cấu trúc JSON, vì vậy bạn có thể đặt các dữ liệu khác nhau bên trong mỗi cấu trúc như các vectơ số dài thay vì tạo các bảng lớn với kích thước lớn nhất.

Tôi hy vọng lời giải thích ngắn gọn này sẽ hữu ích cho bạn và nếu bạn muốn tìm hiểu thêm về điều này, tại đây, bạn có một số tài nguyên mà bạn có thể sử dụng:

  • Egghead : Trang web này có đầy đủ các hướng dẫn ngắn tuyệt vời về JavaScript và môi trường của nó. Nó đáng để thử. Và giảm giá theo thời gian.
  • Code School : Với một khóa học miễn phí và rất thú vị về các công cụ dành cho nhà phát triển Chrome để giúp bạn kiểm tra phía máy khách.
  • Codecademy : Với các khóa học miễn phí về HTML, CSS, JavaScript, jQuery và PHP mà bạn có thể theo dõi với các ví dụ trực tuyến.
  • 10gen Education : Với mọi thứ bạn cần biết về MongoDB trong các hướng dẫn cho các ngôn ngữ khác nhau.
  • W3Schools : Cái này có hướng dẫn về tất cả những điều này và bạn có thể sử dụng nó như một nơi tham khảo vì nó có rất nhiều ví dụ shortcode thực sự hữu ích.
  • Udacity : Một nơi có các khóa học video miễn phí về các chủ đề khác nhau với một số khóa học thú vị về phát triển web và tôi thích nhất, khóa học WebGL tuyệt vời dành cho đồ họa 3D với JavaScript.

Tôi hy vọng nó sẽ giúp bạn bắt đầu.

Chúc vui vẻ!


Câu trả lời chi tiết tốt đẹp giải thích cơ học.
Duane

Cảm ơn :) Tôi vừa thêm một bản cập nhật vào cuối câu trả lời để giải quyết vấn đề. Bạn có thể sử dụng máy chủ nút có thư viện gọi là "mysql" và tôi đã thêm liên kết đến trình tạo API mà tôi đã tạo mà bạn có thể sử dụng để bắt đầu một dự án API mới. Hy vọng nó giúp.
Timbergus

Re "then": JavaScript được sử dụng phía máy chủ quay trở lại năm 1995, khi nó được đưa vào Netscape Enterprise Server. Microsoft đã đưa "JScript" vào máy chủ IIS của mình ngay sau đó. JavaScript trên máy chủ không phải là mới.
TJ Crowder

Tôi nghĩ sẽ rất tốt nếu câu trả lời này có thông tin mới nhất ở trên cùng hoặc chỉ cần xóa thông tin cũ đã lỗi thời. Nó cũng hơi dài dòng và tập trung vào các ngôn ngữ cụ thể. Câu trả lời ngắn gọn là JavaScript có thể được sử dụng để kết nối với cơ sở dữ liệu MySQL trực tiếp từ Node.JS (hoặc môi trường thời gian chạy phía máy chủ khác) nhưng không phải từ trình duyệt do cố ý bảo mật trình duyệt.
Caltor

8

Tôi nghĩ rằng bạn sẽ cần thêm một cái gì đó như PHP vào phương trình. PHP để tương tác với cơ sở dữ liệu và sau đó bạn có thể thực hiện các cuộc gọi AJAX bằng Javascript.


8

Hơi muộn nhưng gần đây tôi đã phát hiện ra rằng MySql 5.7 có plugin http thông qua việc người dùng có thể kết nối trực tiếp với mysql ngay bây giờ.

Tìm Http Client cho mysql 5.7


7

Câu trả lời đơn giản là: không.

JavaScript là một ngôn ngữ phía máy khách chạy trong trình duyệt ( mặc dù node.js ) và MySQL là một công nghệ phía máy chủ chạy trên máy chủ.

Điều đó có nghĩa là bạn thường sử dụng ngôn ngữ phía máy chủ như ASP.NET hoặc PHP để kết nối với cơ sở dữ liệu.


Javascript (ở dạng trình duyệt, phía máy khách) được sử dụng hàng ngày để kết nối với các công nghệ phía máy chủ (Apache, Nginx, PHP, NodeJS, v.v.) đang chạy trên máy chủ. Chính định nghĩa của máy chủ / máy khách yêu cầu rằng "sự phân chia" giữa chúng phải được vượt qua.
jeteon

6

ĐÚNG? Có một cái nhìn một sao băng. Liên kết:

http://meteor.com/screencasthttp://net.tutsplus.com/tutorials/javascript-ajax/whats-this-meteor-thing/

Tôi không hiểu nó được thực hiện như thế nào. Nhưng Nettuts + đưa thứ này vào phần javascript-ajax, có thể điều kỳ diệu sẽ xảy ra.

Nó cũng chỉ ra một số cách để kết nối và chèn vào MongoDB bằng JS, như sau:

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
"Bạn có thể thay thế một cơ sở dữ liệu khác cho MongoDB bằng cách cung cấp trình điều khiển cơ sở dữ liệu phía máy chủ và / hoặc bộ đệm phía máy khách triển khai một API thay thế. Mongo-liveata là một điểm khởi đầu tốt cho một dự án như vậy." - docs.meteor.com
LeeGee 10/10/12

Meteor được viết bằng Node.js nên tôi e rằng câu trả lời này không thêm bất cứ điều gì mới hoặc thay đổi mọi thứ. Bạn chỉ có một khuôn khổ bao gồm máy khách và máy chủ.
Caltor

4

Tùy thuộc vào môi trường của bạn, bạn có thể sử dụng Rhino để thực hiện việc này, hãy xem trang web Rhino . Điều này cho phép bạn truy cập vào tất cả các thư viện Java từ bên trong JavaScript.


4

Đúng. Có một plugin HTTP cho MySQL.

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

Tôi chỉ đang tìm kiếm thông tin về nó, điều này đã dẫn tôi đến câu hỏi về stackoverflow này. Bạn sẽ có thể AJAX cơ sở dữ liệu MySQL ngay bây giờ hoặc trong tương lai gần (họ cho rằng nó chưa sẵn sàng để sản xuất).


2

Thông thường, bạn cần một ngôn ngữ kịch bản phía máy chủ như PHP để kết nối với MySQL, tuy nhiên, nếu bạn chỉ thực hiện một mô hình nhanh, thì bạn có thể sử dụng http://www.mysqljs.com để kết nối với MySQL từ Javascript bằng cách sử dụng mã như sau:

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

Cần phải đề cập rằng đây không phải là cách an toàn để truy cập MySql và chỉ phù hợp với các bản demo riêng tư hoặc các trường hợp mà người dùng cuối không thể truy cập mã nguồn, chẳng hạn như trong ứng dụng Phonegap iOS.


Sau khi kiểm tra nhanh chóng này đặt ra một mối đe dọa cho ăn cắp thông tin cơ sở dữ liệu theo cách nhìn của dòng 6 trên kịch bản mà trong đó các quốc giavar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas

@Dragas - Đúng vậy. javascript không có cách riêng để kết nối với cơ sở dữ liệu mysql, do đó dll mysql được lưu trữ phía máy chủ, do đó gọi AJAX. Nó cũng có nghĩa rằng nếu bạn đang sử dụng một tường lửa trên cổng 3306, bạn cần phải mở này để kết nối đến từ mysqljs.com
Fiach Reid


1

Có bạn có thể. Các trình kết nối MySQL sử dụng TCP để kết nối và trong JS có một phiên bản sửa đổi nhỏ của ứng dụng khách TCP được gọi là Websocket. Nhưng bạn không thể kết nối trực tiếp với máy chủ MySQL bằng websocket. Bạn sẽ cần một số cầu nối của bên thứ 3 giữa websocket và mysql. Nó nhận truy vấn từ websocket, gửi đến mysql, kết quả phản hồi và gửi lại tới JS.

Và đây là cầu nối ví dụ của tôi được viết bằng C # với thư viện websocket-sharp:

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 bên:

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

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

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

0

Không.

Bạn cần viết một trình bao bọc bằng PHP, rồi xuất dữ liệu trả về (có thể là Json). ĐỪNG BAO GIỜ, lấy từ mã SQL "_GET" của bạn, vì đây được gọi là SQL injection (những người học được điều này sẽ có toàn quyền kiểm soát cơ sở dữ liệu của bạn).

Đây là một ví dụ tôi đã viết:

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; 
}

Vui lòng tìm hiểu về SQL injection.


0

Bạn có thể kết nối với MySQL từ Javascript thông qua một applet JAVA. Ứng dụng JAVA sẽ nhúng trình điều khiển JDBC cho MySQL để cho phép bạn kết nối với MySQL.

Hãy nhớ rằng nếu bạn muốn kết nối với máy chủ MySQL từ xa (không phải máy chủ mà bạn đã tải xuống applet từ đó), bạn sẽ cần yêu cầu người dùng cấp quyền mở rộng cho applet. Theo mặc định, applet chỉ có thể kết nối với máy chủ mà chúng được tải xuống.


0

Nếu bạn không bị khóa trên MySQL, bạn có thể chuyển sang PostgreSQL. Nó hỗ trợ các thủ tục JavaScript (PL / V8) bên trong cơ sở dữ liệu. Nó rất nhanh và mạnh mẽ. Kiểm tra bài đăng này .


0

JavaScript không thể kết nối trực tiếp với DB để nhận dữ liệu cần thiết nhưng bạn có thể sử dụng AJAX. Để thực hiện yêu cầu AJAX dễ dàng tới máy chủ, bạn có thể sử dụng khung jQuery JS http://jquery.com . Đây là một ví dụ nhỏ

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
truy vấn MySQL trong ví dụ này ở đâu?
Michael

@Michael: Câu hỏi hay.
Connor Gurney

-1

Tôi hiểu câu hỏi của bạn Tôi nghĩ bạn đang nhầm lẫn nó với các ngôn ngữ như dot.net và java, nơi bạn có thể mở kết nối DB trong mã của mình. Không, JavaScript không thể kết nối trực tiếp với MySQL vì JavaScript là ngôn ngữ kịch bản phía máy khách (Exception Node.js). Bạn cần một lớp giữa như RESTful API để truy cập dữ liệu.


-3

Bạn có thể thêm kết nối mysql bằng tệp PHP. Dưới đây là ví dụ về tệp 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);
   ?> }

Thực ra, nó không phải là một câu trả lời. Câu hỏi là Can JavaScript connect with MySQL?.
Alex.K.

Điều này không liên quan đến câu hỏi được hỏi. Tác giả của câu hỏi đã nói rất cụ thể về Javascript.
geekgugi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.