Can JavaScript connect with MySQL?

2019-01-01 00:53发布

问题:

Can JavaScript connect with MySQL? If so, how?

回答1:

No, JavaScript can not directly connect to MySQL. But you can mix JS with PHP to do so.

JavaScript is a client-side language and your MySQL database is going to be running on a server



回答2:

Client-side JavaScript cannot access MySQL without some kind of bridge. But the above bold statements that JavaScript is just a client-side language are incorrect -- JavaScript can run client-side and server-side, as with Node.js.

Node.js can access MySQL through something like https://github.com/sidorares/node-mysql2

You might also develop something using Socket.IO

Did you mean to ask whether a client-side JS app can access MySQL? I am not sure if such libraries exist, but they are possible.

EDIT: Since writing, we now have MySQL Cluster:

The MySQL Cluster JavaScript Driver for Node.js is just what it sounds like it is – it’s a connector that can be called directly from your JavaScript code to read and write your data. As it accesses the data nodes directly, there is no extra latency from passing through a MySQL Server and need to convert from JavaScript code//objects into SQL operations. If for some reason, you’d prefer it to pass through a MySQL Server (for example if you’re storing tables in InnoDB) then that can be configured.



回答3:

THEN

As I understand the question and correct me if I am wrong, it refers to the classic server model with JavaScript only on the client side. In this classic model, with LAMP servers (Linux, Apache, MySQL, PHP) the language in contact with the database is PHP, so to request data to the database you need to write PHP scripts and echo the returning data to the client. Basically, the languages distribution according to physical machines is:

  1. Server Side: PHP and MySQL.
  2. Client Side: HTML/CSS and JavaScript.

This responds to an MVC model (Model, View, Controller) where we have the following functionality:

  1. MODEL: The model is what deals with the data, in this case, the PHP scripts that manage variables or that access data stored, in this case in our MySQL database and send it as JSON data to the client.
  2. VIEW: The view is what we see and it should be completely independent of the model. It just needs to show the data contained in the model, but it shouldn\'t have relevant data on it. In this case, the view uses HTML and CSS. HTML to create the basic structure of the view, and CSS to give the shape to this basic structure.
  3. CONTROLLER: The controller is the interface between our model and our view. In this case, the language used is JavaScript and it takes the data the model send us as a JSON package and put it inside the containers that offer the HTML structure. The way the controller interacts with the model is using AJAX. We use GET and POST methods to call PHP scripts on the server side and to catch the returned data from the server.

For the controller we have really interesting tools like jQuery, as \"low-level\" library to control the HTML structure (DOM), and then new, more high level ones as Knockout.js that allow us to create observers that connect different DOM elements updating them when events occur. There is also Angular.js by Google that works in a similar way, but seems to be a complete environment. To help you to choose among the, here there are two excellent analysis of the two tools: Knockout vs. Angular.js and Knockout.js vs. Angular.js. I am still reading. Hope them help you.

NOW

In modern servers based in Node.js, we use JavaScript for everything. Node.js is a JavaScript environment with many libraries that work with Google V8, Chrome JavaScript engine. The way we work with this new servers is:

  1. Node.js and Express: The main frame where the server is built. We can create a server with a few lines of code or even use libraries as Express to make even easier to create the server. With Node.js and Express, we will manage the petitions to the server from the clients and will answer them with the appropriate pages.
  2. Jade: To create the pages we use a templating language, in this case, Jade, that allow us to write web pages as we were writing HTML but with differences (it take a little time but is easy to learn). Then, in the code of the server to answer the client petitions, we just need to render the Jade code into \"real\" HTML code.
  3. Stylus: Similar to Jade but for css. In this case, we use a middleware function to convert the stylus file into a real css file for our page.

Then we have a lot of packages we can install using the NPM (Node.js package manager) and use them directly in our Node.js server just requiring it (for those of you that want to learn Node.js, try this beginner tutorial for an overview). And among this packages, you have some of them to access databases. Using this you can use JavaScript on the server side to access My SQL databases.

But the best you can do if you are going to work with Node.js is to use the new NoSQL databases like MongoDB, based on JSON files. Instead of storing tables like MySQL, it stores the data in JSON structures, so you can put different data inside each structure like long numeric vectors instead creating huge tables for the size of the biggest one.

I hope this brief explanation becomes useful to you, and if you want to learn more about this, here you have some resources you can use:

  • Egghead: This site is full of great short tutorials about JavaScript and its environment. It worths a try. And the make discounts from time to time.
  • Code School: With a free and very interesting course about Chrome Developer tools to help you to test the client side.
  • Codecademy: With free courses about HTML, CSS, JavaScript, jQuery, and PHP that you can follow with online examples.
  • 10gen Education: With everything you need to know about MongoDB in tutorials for different languages.
  • W3Schools: This one has tutorials about all this and you can use it as a reference place because it has a lot of short code examples really useful.
  • Udacity: A place with free video courses about different subjects with a few interesting one about web development and my preferred, an amazing WebGL course for 3D graphics with JavaScript.

UPDATE!

Right now, having a Node server, if you want to communicate with a MySQL database, you can use a library called mysql. You can create queries as you did with PHP, and you can try it using an API generator I have created, that you can download using NPM. It has a wizard that allows you to choose what databases you want to use, among other things.

I hope it helps you to start.

Have fun!



回答4:

I think you would need to add something like PHP into the equation. PHP to interact with the database and then you could make AJAX calls with Javascript.



回答5:

Simple answer is: no.

JavaScript is a client-side language that runs in the browser (node.js notwithstanding) and MySQL is a server-side technology that runs on the server.

That means you typically use a server-side language like ASP.NET or PHP to connect to the database.



回答6:

Bit late but recently I have found out that MySql 5.7 got http plugin throuh which user can directly connect to mysql now.

Look for Http Client for mysql 5.7



回答7:

YES? Have a look a meteor. Links:

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

I don\'t understand how it is done. But Nettuts+ put this thing in the javascript-ajax section, maybe magic happens.

It also shows some way to connect and insert to MongoDB with JS, like this:

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


回答8:

Depending on your environment, you could use Rhino to do this, see Rhino website. This gives you access to all of the Java libraries from within JavaScript.



回答9:

Yes. There is an HTTP plugin for MySQL.

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

I\'m just googling about it now, which led me to this stackoverflow question. You should be able to AJAX a MySQL database now or in the near future (they claim it\'s not ready for production).



回答10:

You can send AJAX requests to some server-side RESTful wrappers for MySQL, such as DBSlayer, PhpRestSQL or AlsoSQL (for Drizzle, a fork of MySQL).



回答11:

No.

You need to write a wrapper in PHP, and then export the returned data (probably as Json). NEVER, get from your \"_GET\" the SQL code, as this is called an SQL injection (people who learn this will have full control over your database).

This is an example I wrote:

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

Do learn about SQL injections please.



回答12:

You can connect to MySQL from Javascript through a JAVA applet. The JAVA applet would embed the JDBC driver for MySQL that will allow you to connect to MySQL.

Remember that if you want to connect to a remote MySQL server (other than the one you downloaded the applet from) you will need to ask users to grant extended permissions to applet. By default, applet can only connect to the server they are downloaded from.



回答13:

JavaScript can\'t connect directly to DB to get needed data but you can use AJAX. To make easy AJAX request to server you can use jQuery JS framework http://jquery.com. Here is a small example

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(); 
$out[\'first\']   = \'first value\';
$out[\'second\']   = \'second value\';
echo json_encode($out);


回答14:

If you\'re not locked on MySQL you can switch to PostgreSQL. It supports JavaScript procedures (PL/V8) inside the database. It is very fast and powerful. Checkout this post.



回答15:

Typically, you need a server side scripting language like PHP to connect to MySQL, however, if you\'re just doing a quick mockup, then you can use http://www.mysqljs.com to connect to MySQL from Javascript using code as follows:

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

It has to be mentioned that this is not a secure way of accessing MySql, and is only suitable for private demos, or scenarios where the source code cannot be accessed by end users, such as within Phonegap iOS apps.



回答16:

I understood your question I think you are confusing it with languages like dot.net and java where you can open DB connection within your code. No, JavaScript can not directly connect to MySQL as JavaScript is a client side scripting language(Exception Node.js).You need a middle layer like RESTful API to access data.



回答17:

Yes you can. MySQL connectors use TCP for connection, and in JS there is an little modified version of TCP client called Websocket. But you can\'t directly connect to MySQL server with websocket. You will need some 3rd party bridge between websocket and mysql. It receive query from websocket, send it to mysql, response result and resend to JS.

And this is my example bridge written in C# with websocket-sharp library:

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 side:

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

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

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


回答18:

You can add mysql connection using PHP file. Below is the example of PHP file.

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