JavaScript可以与MySQL连接吗?


113

JavaScript可以与MySQL连接吗?如果是这样,怎么办?


不,除非您不是在谈论浏览器中的JavaScript。
卡·马太斯

2
服务器端JavaScript(例如通过Rhino)呢?我们可以连接到数据库吗?
Joand 2012年

7
Node.js的还是会工作,以及
加布里埃尔博览会

1
忽略此页面上的所有答案,因为它们都是错误的。 实际上,这是可以做到的。请参阅developer.chrome.com/apps/app_network
Pacerier,2016年

公认的答案是完全错误的(也是在2010年)。这个答案是正确的。
TJ Crowder

Answers:


26

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

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


87
小提示:JavaScript在客户端上运行与它无法连接到数据库服务器无关。将来的语言版本可能会添加API来访问远程数据库,这很好(尽管极不可能)。
卢卡斯·波特斯基

3
不过,我不会称其为“将JS与PHP混合使用”。您可能要做的是让PHP代码生成它预先从MySQL检索到的JavaScript代码/数据(例如json)。或者,您可以在服务器上使用PHP来提供http(json / REST / SOAP / ...等等)接口来访问php代码从MySQL检索到的数据-并且该http接口可以由运行在任何地方的JavaScript代码调用,主要是一个浏览器。从今天开始,还说JavaScript不再是客户端了-例如检查Node.js。
Henning 2012年

14
“ JavaScript是一种客户端语言”不一定:没有比Java更好的了。
LeeGee 2012年

2
使用新版本的mysql 5.7,httpclient可以使用http插件(为mysql 5.7内置)直接与mysql数据库通信
Atul Chaudhary 2014年

所有访问您站点的浏览器在本地具有直接访问您的MySQL服务器的javascript文件,是否会对您造成一定的安全风险?
瓦西利斯

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 APIGraphQL端点暴露在最前面,然后开始使用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脚本并捕获服务器返回的数据。

对于控制器,我们有非常有趣的工具,例如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. 手写笔类似于Jade,但用于CSS。在这种情况下,我们使用中间件功能将手写笔文件转换为页面的真实CSS文件。

然后,我们有很多软件包可以使用NPM(Node.js软件包管理器)安装,并直接在需要它的Node.js服务器中使用(对于那些想学习Node.js的人,请尝试此初学者教程)以获取概述)。在这些软件包中,您有一些可以访问数据库。使用此功能,您可以在服务器端使用JavaScript来访问My SQL数据库。

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

我希望这个简短的说明对您有用,如果您想了解更多有关此的信息,可以在这里使用一些资源:

  • Egghead:这个站点上有很多有关JavaScript及其环境的简短教程。值得一试。并且不时打折。
  • Code School:提供有关Chrome Developer工具的免费且非常有趣的课程,可帮助您测试客户端。
  • Codecademy:提供有关HTML,CSS,JavaScript,jQuery和PHP的免费课程,您可以通过在线示例进行学习。
  • 10gen教育:在各种语言的教程中,您需要了解有关MongoDB的所有知识。
  • W3Schools:这是一个有关所有这些的教程,您可以将其用作参考位置,因为它有很多确实有用的短代码示例。
  • Udacity:一个提供有关不同主题的免费视频课程以及一些与Web开发有关的有趣视频课程的地方,而我的首选是一门很棒的有关使用JavaScript进行3D图形的WebGL课程。

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

玩得开心!


尼斯详细的答案,解释力学。
杜安(Duane)

谢谢:)我刚刚在答案的末尾添加了一个更新来解决问题。您可以将节点服务器与名为“ mysql”的库一起使用,并且我向我创建的API生成器添加了一个链接,可用于启动新的API项目。希望能帮助到你。
Timbergus

“然后”:服务器端使用的JavaScript可以追溯到1995年,当时它已包含在Netscape Enterprise Server中。此后不久,Microsoft将“ JScript”放入其IIS服务器。服务器上的JavaScript并不是远程的。
TJ Crowder

我认为如果此答案的顶部具有最新信息,或者只是删除旧的过时信息,那将是很好的。它也有点冗长,只针对特定语言。简短的答案是,由于故意的浏览器安全性,JavaScript可用于直接从Node.JS(或其他服务器端运行时环境)连接到MySQL数据库,但不能用于从浏览器连接。
卡托

8

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



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

流星是使用Node.js编写的,因此恐怕这个答案不会添加任何新内容或更改任何内容。您只有一个涵盖客户端和服务器的框架。
卡托

4

根据您的环境,您可以使用Rhino进行此操作,请参见Rhino网站。这使您可以从JavaScript内访问所有Java库。



2

通常,您需要像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的安全方法,仅适用于私人演示或最终用户无法访问源代码的场景,例如Phonegap iOS应用程序中的场景。


快速检查后,这会威胁到窃取数据库凭据的威胁,如该脚本的第6行所示:var strSrc = "http://mysqljs.com/sql.aspx?";
Dragas,

@Dragas-是的。javascript没有连接到mysql数据库的本地方法,因此mysql dll是托管在服务器端的,因此是AJAX调用。这也意味着,如果您在端口3306上使用防火墙,则需要将其打开以访问
mysqljs.com的


1

是的你可以。MySQL连接器使用TCP进行连接,而在JS中,TCP客户端有一个小的修改版本,称为Websocket。但是您不能使用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嵌入JDBC驱动程序,从而使您可以连接到MySQL。

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


0

如果您未锁定MySQL,则可以切换到PostgreSQL。它支持数据库内部的JavaScript过程(PL / V8)。它非常快速且强大。查看此帖子


0

JavaScript无法直接连接到数据库以获取所需的数据,但是您可以使用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查询在哪里?
迈克尔

@迈克尔:很好的问题。
康纳·格尼

-1

我理解了您的问题,我认为您将其与诸如dot.net和java之类的语言混淆,您可以在代码中打开数据库连接。不,JavaScript无法直接连接到MySQL,因为JavaScript是一种客户端脚本语言(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.

与提出的问题相关的百分比为零。问题的作者对Java语言非常具体。
geekgugi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.