【问题标题】:Can JavaScript connect with MySQL?JavaScript 可以连接 MySQL 吗?
【发布时间】:2011-03-02 12:50:38
【问题描述】:

JavaScript 可以连接 MySQL 吗?如果有,怎么做?

【问题讨论】:

  • 不,除非您不是在谈论浏览器中的 JavaScript。
  • 服务器端 JavaScript(例如通过 Rhino)呢?我们可以连接到数据库吗?
  • 否则 Node.js 也可以工作
  • 忽略此页面上的所有答案,因为它们都是错误的。 其实是可以的。developer.chrome.com/apps/app_network
  • 接受的答案是完全错误的(在 2010 年也是如此)。 This answer 是正确的。

标签: javascript mysql ajax json


【解决方案1】:

如果没有某种桥接,客户端 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 中),那么可以对其进行配置。

【讨论】:

    【解决方案2】:

    如果您想使用 JavaScript 连接到 MySQL 数据库,您可以使用 Node.js 和一个名为 mysql 的库。您可以创建查询,并以寄存器数组的形式获取结果。如果你想试试,可以用我的project generator创建一个后端,选择MySQL作为连接的数据库。然后,只需将您的新 REST APIGraphQL 端点暴露在您的前端并开始使用您的 MySQL 数据库。


    怀旧留下的旧答案

    那么

    据我了解,如果我错了,请纠正我,它指的是仅在客户端使用 JavaScript 的经典服务器模型。在这个经典模型中,使用 LAMP 服务器(Linux、Apache、MySQL、PHP)与数据库接触的语言是 PHP,因此要向数据库请求数据,您需要编写 PHP 脚本和 echo 向客户端返回数据。基本上,根据物理机器的语言分布是:

    1. 服务器端: PHP 和 MySQL。
    2. 客户端: HTML/CSS 和 JavaScript。

    这对我们具有以下功能的 MVC 模型(模型、视图、控制器)做出了回应:

    1. 模型:模型是处理数据的,在这种情况下,是管理变量或访问存储数据的 PHP 脚本,在这种情况下是在我们的 MySQL 数据库中,并将其作为 JSON 数据发送到客户端.
    2. VIEW:视图就是我们所看到的,它应该完全独立于模型。它只需要显示模型中包含的数据,但它不应该有相关数据。在这种情况下,视图使用 HTML 和 CSS。 HTML 用于创建视图的基本结构,而 CSS 用于为该基本结构赋予形状。
    3. 控制器:控制器是模型和视图之间的接口。在这种情况下,使用的语言是 JavaScript,它将模型以 JSON 包的形式发送给我们的数据,并将其放入提供 HTML 结构的容器中。控制器与模型交互的方式是使用 AJAX。我们使用 GETPOST 方法在服务器端调用 PHP 脚本并捕获服务器返回的数据。

    对于控制器,我们有一些非常有趣的工具,例如 jQuery,作为“低级”库来控制 HTML 结构 (DOM),然后是新的、更高级的库,例如 Knockout.js,它允许我们创建连接不同 DOM 元素的观察者,在事件发生时更新它们。 Google 的 Angular.js 也有类似的工作方式,但似乎是一个完整的环境。为了帮助您在其中进行选择,这里您对这两个工具进行了两次出色的分析:Knockout vs. Angular.jsKnockout.js vs. Angular.js。我还在读书。希望他们能帮到你。

    现在

    在基于 Node.js 的现代服务器中,我们使用 JavaScript 处理一切。 Node.js 是一个 JavaScript 环境,其中包含许多与 Google V8、Chrome JavaScript 引擎一起工作的库。我们使用这些新服务器的方式是:

    1. Node.jsExpress 构建服务器的大型机。我们可以用几行代码创建一个服务器,甚至可以使用 Express 之类的库来更容易地创建服务器。使用 Node.js 和 Express,我们将管理从客户端到服务器的请求,并使用适当的页面来回答它们。
    2. Jade: 为了创建页面,我们使用模板语言,在本例中是 Jade,它允许我们像编写 HTML 一样编写网页,但有一些不同(这需要一点时间,但简单易学)。然后,在服务端响应客户端请求的代码中,我们只需要将 Jade 代码渲染成“真实”的 HTML 代码即可。
    3. Stylus: 类似于 Jade,但用于 CSS。在这种情况下,我们使用中间件函数将手写笔文件转换为我们页面的真实 CSS 文件。

    然后,我们可以使用 NPM(Node.js 包管理器)安装很多包,并直接在我们的 Node.js 服务器中使用它们,只需要它(对于你们这些人)想学习 Node.js 的人,试试这个 beginner tutorial 以获得概述)。在这些包中,您有一些可以访问数据库。使用它,您可以在服务器端使用 JavaScript 来访问 My SQL 数据库。

    但是,如果要使用 Node.js,最好的办法是使用基于 JSON 文件的新 NoSQL 数据库,例如 MongoDB。它不像 MySQL 那样存储表,而是将数据存储在 JSON 结构中,因此您可以将不同的数据放入每个结构中,例如长数字向量,而不是为最大的表创建巨大的表。

    我希望这个简短的解释对你有用,如果你想了解更多,这里有一些你可以使用的资源:

    • Egghead:这个网站有很多关于 JavaScript 及其环境的简短教程。值得一试。并且不时打折。
    • Code School:提供有关 Chrome 开发人员工具的免费且非常有趣的课程,可帮助您测试客户端。
    • Codecademy:提供有关 HTML、CSS、JavaScript、jQuery 和 PHP 的免费课程,您可以通过在线示例进行学习。
    • 10gen Education:在不同语言的教程中包含您需要了解的有关 MongoDB 的所有信息。
    • W3Schools:这个有关于这一切的教程,你可以把它作为参考,因为它有很多非常有用的短代码示例。
    • Udacity:一个提供关于不同主题的免费视频课程的地方,其中包含一些关于 Web 开发的有趣课程,我的首选是使用 JavaScript 进行 3D 图形的令人惊叹的 WebGL 课程。

    我希望它可以帮助你开始。

    玩得开心!

    【讨论】:

    • 很好的详细答案,解释了机制。
    • 谢谢 :) 我刚刚在答案末尾添加了一个更新来解决问题。您可以使用带有名为“mysql”的库的节点服务器,并且我已经添加了一个指向我创建的 API 生成器的链接,您可以使用它来启动一个新的 API 项目。希望对您有所帮助。
    • 关于“then”:服务器端使用的 JavaScript 可以追溯到 1995 年,当时它被包含在 Netscape Enterprise Server 中。此后不久,微软将“JScript”放入其 IIS 服务器。远程服务器上的 JavaScript 并不是新的。
    • 我认为如果这个答案的顶部有最新信息或者只是删除旧的过时信息会很好。它也有点冗长,并且专注于特定的语言。简短的回答是,JavaScript 可用于直接从 Node.JS(或其他服务器端运行时环境)连接到 MySQL 数据库,但由于刻意的浏览器安全性,不能从浏览器连接。
    【解决方案3】:

    不,JavaScript 不能直接连接到 MySQL。但是你可以将 JS 与 PHP 混合使用。

    JavaScript 是一种客户端语言,您的 MySQL 数据库将在服务器上运行

    【讨论】:

    • 小提示:JavaScript 在客户端运行的事实与它无法连接到数据库服务器的事实无关。未来版本的语言很可能会添加 API 来访问远程数据库。
    • 不过,我不会称其为“将 JS 与 PHP 混合”。你可能会做的是让 PHP 代码生成它预先从 MySQL 检索到的 JavaScript 代码/数据(例如 json)。或者你可以在服务器上使用 PHP 来提供一个 http(json/REST/SOAP/...whatever) 接口来访问 php 代码从 MySQL 检索到的数据——这个 http 接口可以被运行在任何地方的 JavaScript 代码调用,主要是浏览器。到今天为止,还说 JavaScript 是客户端不再是最新的了 - 例如检查 Node.js。
    • "JavaScript 是一种客户端语言" 不一定:不比 Java 多。
    • 新版本的mysql 5.7 httpclient可以使用http插件直接与mysql数据库通信(为mysql 5.7构建)
    • 所有访问您网站的浏览器在本地拥有直接访问您的 MySQL 服务器的 javascript 文件,这难道不是某种安全风险吗?
    【解决方案4】:

    有点晚了,但最近我发现 MySql 5.7 有了 http 插件,用户现在可以直接连接到 mysql。

    为 mysql 5.7 寻找 Http 客户端

    【讨论】:

      【解决方案5】:

      我认为您需要在方程式中添加类似 PHP 的内容。 PHP 与数据库进行交互,然后您可以使用 Javascript 进行 AJAX 调用。

      【讨论】:

        【解决方案6】:

        简单的答案是:不。

        JavaScript 是一种在浏览器中运行的客户端语言(尽管有node.js),而 MySQL 是一种在服务器上运行的服务器端技术。

        这意味着您通常使用 ASP.NET 或 PHP 等服务器端语言来连接数据库。

        【讨论】:

        • Javascript(在客户端,浏览器形式)每天用于连接在服务器上运行的服务器端技术(Apache、Nginx、PHP、NodeJS 等)。服务器/客户端的定义要求它们之间的“鸿沟”是可以克服的。
        【解决方案7】:

        是吗?看看流星。链接:

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

        【讨论】:

        • "您可以通过提供服务器端数据库驱动程序和/或实现替代 API 的客户端缓存来替换另一个数据库。mongo-livedata 是一个很好的起点。项目。” -- docs.meteor.com
        • Meteor 是使用 Node.js 编写的,所以恐怕这个答案不会添加任何新内容或改变任何东西。你只有一个涵盖客户端和服务器的框架。
        【解决方案8】:

        是的。 MySQL 有一个 HTTP 插件。

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

        我现在只是在谷歌上搜索它,这让我想到了这个 stackoverflow 问题。您现在或不久的将来应该能够 AJAX 一个 MySQL 数据库(他们声称它还没有准备好投入生产)。

        【讨论】:

          【解决方案9】:

          根据您的环境,您可以使用 Rhino 来执行此操作,请参阅 Rhino website。这使您可以从 JavaScript 中访问所有 J​​ava 库。

          【讨论】:

            【解决方案10】:

            通常,您需要像 PHP 这样的服务器端脚本语言来连接 MySQL,但是,如果您只是做一个快速的模型,那么您可以使用 http://www.mysqljs.com 使用以下代码从 Javascript 连接到 MySQL:

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

            需要说明的是,这不是一种安全的访问MySql的方式,只适用于私有demo,或者最终用户无法访问源代码的场景,比如Phonegap iOS应用内。

            【讨论】:

            • 在快速检查后,这对窃取数据库凭据构成威胁,如该脚本中的第 6 行所示,该脚本声明为 var strSrc = "http://mysqljs.com/sql.aspx?";
            • @Dragas - 没错。 javascript 没有连接到 mysql 数据库的本地方式,因此 mysql dll 托管在服务器端,因此 AJAX 调用。这也意味着如果您在端口 3306 上使用防火墙,则需要将其开放给来自 mysqljs.com 的传入连接
            【解决方案11】:

            是的,你可以。 MySQL 连接器使用 TCP 进行连接,在 JS 中有一个稍微修改过的 TCP 客户端版本,称为 Websocket。但是您不能使用 websocket 直接连接到 MySQL 服务器。您将需要一些 websocket 和 mysql 之间的第三方桥梁。它接收来自websocket的查询,将其发送到mysql,响应结果并重新发送到JS。

            这是我用 C# 编写的带有 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 方面:

            var ws = new WebSocket("ws://localhost/");
            
            ws.send("server=localhost;user=root;database=mydb;");
            
            ws.send("select * from users");
            

            【讨论】:

              【解决方案12】:

              您可以将 AJAX 请求发送到 MySQL 的一些服务器端 RESTful 包装器,例如 DBSlayerPhpRestSQLAlsoSQL(对于 Drizzle,MySQL 的一个分支)。

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                • 本例中的 MySQL 查询在哪里?
                • @Michael:好问题。
                【解决方案14】:

                没有。

                你需要在 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 注入。

                【讨论】:

                  【解决方案15】:

                  您可以通过 JAVA 小程序从 Javascript 连接到 MySQL。 JAVA 小程序将嵌入 MySQL 的 JDBC 驱动程序,这将允许您连接到 MySQL。

                  请记住,如果您想连接到远程 MySQL 服务器(不是您从中下载小程序的服务器),您需要要求用户授予小程序扩展权限。默认情况下,小程序只能连接到下载它们的服务器。

                  【讨论】:

                    【解决方案16】:

                    如果您没有锁定 MySQL,您可以切换到 PostgreSQL。它支持数据库内的 JavaScript 程序 (PL/V8)。它非常快速和强大。看看这个post

                    【讨论】:

                      【解决方案17】:

                      当然可以。在 Nodejs 中,您可以使用 MySQL 驱动程序将服务器端 JavaScript 与 MySQL 连接起来。 Nodejs-MySQL

                      【讨论】:

                        猜你喜欢
                        • 2010-09-20
                        • 2012-01-02
                        • 2015-05-16
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-02-13
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多