¿Puede JavaScript conectarse con MySQL?


113

¿Puede JavaScript conectarse con MySQL? ¿Si es así, cómo?


no, a menos que no esté hablando de JavaScript en el navegador.
Luca Matteis

2
¿Qué pasa con JavaScript del lado del servidor (por ejemplo, a través de Rhino)? ¿Podemos conectarnos a una base de datos?
Joand

7
O Node.js también funcionará
Feria Gabriel

1
Ignore todas las respuestas en esta página porque todas están equivocadas. De hecho, se puede hacer. Ver developer.chrome.com/apps/app_network
Pacerier

La respuesta aceptada es simplemente incorrecta (y también lo fue en 2010). Esta respuesta es correcta.
TJ Crowder

Respuestas:


26

No, JavaScript no puede conectarse directamente a MySQL. Pero puedes mezclar JS con PHP para hacerlo.

JavaScript es un lenguaje del lado del cliente y su base de datos MySQL se ejecutará en un servidor


87
pequeña nota: el hecho de que JavaScript se ejecute en el lado del cliente no tiene NADA que ver con el hecho de que no puede conectarse a un servidor de base de datos. Podría ser muy bueno (aunque muy poco probable) que una versión futura del lenguaje agregue API para acceder a bases de datos remotas.
Lucas Pottersky

3
Sin embargo, yo no llamaría a eso "mezclar JS con PHP". Lo que puede hacer es dejar que PHP Code genere código / datos JavaScript (json, por ejemplo) que ha recuperado de MySQL por adelantado. O puede usar PHP en un servidor para proporcionar una interfaz http (json / REST / SOAP / ... lo que sea) para acceder a los datos que el código php recupera de MySQL, y esta interfaz http puede ser llamada por código JavaScript que se ejecuta en cualquier lugar, principalmente un brwoser. A partir de hoy, también decir que JavaScript es del lado del cliente ya no está actualizado; consulte Node.js, por ejemplo.
Henning

14
"JavaScript es un lenguaje del lado del cliente" No necesariamente: no más que Java.
LeeGee

2
con la nueva versión de mysql 5.7, httpclient puede comunicarse directamente con la base de datos mysql usando el complemento http (construido para mysql 5.7)
Atul Chaudhary

¿No sería de alguna manera un riesgo de seguridad para todos los navegadores que acceden a su sitio tener localmente el archivo javascript que accede directamente a su servidor MySQL?
Vassilis

85

El JavaScript del lado del cliente no puede acceder a MySQL sin algún tipo de puente. Pero las declaraciones en negrita anteriores de que JavaScript es solo un lenguaje del lado del cliente son incorrectas: JavaScript puede ejecutarse del lado del cliente y del lado del servidor, como con Node.js.

Node.js puede acceder a MySQL a través de algo como https://github.com/sidorares/node-mysql2

También puede desarrollar algo usando Socket.IO

¿Quería preguntar si una aplicación JS del lado del cliente puede acceder a MySQL? No estoy seguro de que existan tales bibliotecas, pero son posibles.

EDITAR : Desde que escribimos, ahora tenemos MySQL Cluster :

El controlador JavaScript de MySQL Cluster para Node.js es exactamente lo que parece: es un conector al que se puede llamar directamente desde su código JavaScript para leer y escribir sus datos. A medida que accede a los nodos de datos directamente, no hay latencia adicional al pasar a través de un servidor MySQL y es necesario convertir objetos de código JavaScript // en operaciones SQL. Si, por alguna razón, prefiere que pase a través de un servidor MySQL (por ejemplo, si está almacenando tablas en InnoDB), entonces puede configurarlo.


53

Si desea conectarse a una base de datos MySQL usando JavaScript, puede usar Node.js y una biblioteca llamada mysql . Puede crear consultas y obtener resultados como una matriz de registros. Si quieres probarlo, puedes usar mi generador de proyectos para crear un backend y elegir MySQL como base de datos para conectarte. Luego, simplemente exponga su nueva API REST o punto final GraphQL al frente y comience a trabajar con su base de datos MySQL.


ANTIGUA RESPUESTA DEJADA POR NOSTALGIA

LUEGO

Como entiendo la pregunta y me corrijo si me equivoco, se refiere al modelo de servidor clásico con JavaScript solo en el lado del cliente. En este modelo clásico, con servidores LAMP (Linux, Apache, MySQL, PHP) el lenguaje en contacto con la base de datos era PHP, por lo que para solicitar datos a la base de datos es necesario escribir scripts PHP y hacer eco de los datos devueltos al cliente. Básicamente, la distribución de los lenguajes según máquinas físicas fue:

  1. Lado del servidor: PHP y MySQL.
  2. Lado del cliente: HTML / CSS y JavaScript.

Esto respondió a un modelo MVC (Modelo, Vista, Controlador) donde teníamos la siguiente funcionalidad:

  1. MODELO: El modelo es el que trata los datos, en este caso los scripts PHP que manejan variables o que acceden a los datos almacenados, en este caso en nuestra base de datos MySQL y los envían como datos JSON al cliente.
  2. VISTA: La vista es lo que vemos y debe ser completamente independiente del modelo. Solo necesita mostrar los datos contenidos en el modelo, pero no debería tener datos relevantes. En este caso, la vista usa HTML y CSS. HTML para crear la estructura básica de la vista y CSS para dar forma a esta estructura básica.
  3. CONTROLADOR: El controlador es la interfaz entre nuestro modelo y nuestra vista. En este caso, el lenguaje utilizado es JavaScript y toma los datos que el modelo nos envía como un paquete JSON y los coloca dentro de los contenedores que ofrecen la estructura HTML. La forma en que el controlador interactúa con el modelo es mediante AJAX . Usamos métodos GET y POST para llamar a scripts PHP en el lado del servidor y para capturar los datos devueltos por el servidor.

Para el controlador, tenemos herramientas realmente interesantes como jQuery , como biblioteca de "bajo nivel" para controlar la estructura HTML (DOM), y luego otras nuevas y de más alto nivel como Knockout.js que nos permiten crear observadores que conectan diferentes Elementos DOM actualizándolos cuando ocurren eventos. También existe Angular.js de Google que funciona de manera similar, pero parece ser un entorno completo. Para ayudarte a elegir entre ellos, aquí tienes dos análisis excelentes de las dos herramientas: Knockout vs. Angular.js y Knockout.js vs. Angular.js . Sigo leyendo. Espero que te ayuden.

AHORA

En los servidores modernos basados ​​en Node.js, usamos JavaScript para todo. Node.js es un entorno de JavaScript con muchas bibliotecas que funcionan con Google V8, motor de JavaScript de Chrome. La forma en que trabajamos con estos nuevos servidores es:

  1. Node.js y Express : el mainframe donde se construye el servidor. Podemos crear un servidor con unas pocas líneas de código o incluso usar bibliotecas como Express para facilitar aún más la creación del servidor. Con Node.js y Express gestionaremos las peticiones al servidor de los clientes y las responderemos con las páginas correspondientes.
  2. Jade : Para crear las páginas utilizamos un lenguaje de plantillas, en este caso Jade, que nos permite escribir páginas web como estábamos escribiendo HTML pero con diferencias (lleva un poco de tiempo pero es fácil de aprender). Luego, en el código del servidor para responder a las peticiones del cliente, solo necesitamos renderizar el código Jade en un código HTML "real".
  3. Lápiz : similar a Jade pero para CSS. En este caso, usamos una función de middleware para convertir el archivo del lápiz óptico en un archivo CSS real para nuestra página.

Luego tenemos muchos paquetes que podemos instalar usando el NPM (administrador de paquetes de Node.js) y usarlos directamente en nuestro servidor Node.js solo requiriéndolo (para aquellos de ustedes que quieran aprender Node.js, pruebe este tutorial para principiantes para una descripción general). Y entre estos paquetes, tienes algunos para acceder a bases de datos. Con esto, puede usar JavaScript en el lado del servidor para acceder a las bases de datos My SQL.

Pero lo mejor que puede hacer si va a trabajar con Node.js es usar las nuevas bases de datos NoSQL como MongoDB , basadas en archivos JSON. En lugar de almacenar tablas como MySQL, almacena los datos en estructuras JSON, por lo que puede colocar diferentes datos dentro de cada estructura como vectores numéricos largos en lugar de crear tablas enormes para el tamaño de la más grande.

Espero que esta breve explicación te sea de utilidad, y si quieres conocer más sobre esto, aquí tienes algunos recursos que puedes utilizar:

  • Egghead : este sitio está lleno de excelentes tutoriales breves sobre JavaScript y su entorno. Vale la pena intentarlo. Y hacen descuentos de vez en cuando.
  • Escuela de código : con un curso gratuito y muy interesante sobre las herramientas de desarrollador de Chrome para ayudarlo a probar el lado del cliente.
  • Codecademy : Con cursos gratuitos sobre HTML, CSS, JavaScript, jQuery y PHP que puede seguir con ejemplos en línea.
  • Educación 10gen : con todo lo que necesita saber sobre MongoDB en tutoriales para diferentes idiomas.
  • W3Schools : Este tiene tutoriales sobre todo esto y puedes usarlo como lugar de referencia porque tiene muchos ejemplos de shortcode realmente útiles.
  • Udacity : un lugar con cursos de video gratuitos sobre diferentes temas con algunos interesantes sobre desarrollo web y mi preferido, un increíble curso WebGL para gráficos 3D con JavaScript.

Espero que te ayude a empezar.

¡Que te diviertas!


Buena respuesta detallada que explica la mecánica.
Duane

Gracias :) Acabo de agregar una actualización al final de la respuesta para resolver el problema. Puede utilizar un servidor de nodo con una biblioteca llamada "mysql", y he añadido un enlace a un generador de API que he creado que puede utilizar para iniciar un nuevo proyecto de API. Espero eso ayude.
Timbergus

Re "entonces": JavaScript utilizado en el servidor se remonta a 1995, cuando se incluyó en Netscape Enterprise Server. Microsoft puso "JScript" en su servidor IIS poco después. JavaScript en el servidor no es, remotamente, nuevo.
TJ Crowder

Creo que sería bueno si esta respuesta tuviera la información más reciente en la parte superior o simplemente eliminara la información obsoleta. También es un poco detallado y se centra en idiomas particulares. La respuesta corta es que JavaScript se puede utilizar para conectarse a una base de datos MySQL directamente desde Node.JS (u otro entorno de ejecución del lado del servidor) pero no desde el navegador debido a la seguridad deliberada del navegador.
Caltor

8

Creo que necesitaría agregar algo como PHP en la ecuación. PHP para interactuar con la base de datos y luego podría hacer llamadas AJAX con Javascript.


8

Un poco tarde, pero recientemente descubrí que MySql 5.7 obtuvo el complemento http a través del cual el usuario puede conectarse directamente a mysql ahora.

Busque el cliente Http para mysql 5.7


7

La respuesta simple es: no.

JavaScript es un lenguaje del lado del cliente que se ejecuta en el navegador (a pesar de node.js ) y MySQL es una tecnología del lado del servidor que se ejecuta en el servidor.

Eso significa que normalmente usa un lenguaje del lado del servidor como ASP.NET o PHP para conectarse a la base de datos.


Javascript (en el formulario del navegador del lado del cliente) se utiliza todos los días para conectarse con tecnologías del lado del servidor (Apache, Nginx, PHP, NodeJS, etc.) que se ejecutan en el servidor. La definición misma de servidor / cliente requiere que la "división" entre ellos sea superable.
jeteon

6

¿SI? Eche un vistazo a un meteoro. Enlaces:

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

No entiendo como se hace. Pero Nettuts + puso esto en la sección javascript-ajax, tal vez suceda magia.

También muestra alguna forma de conectarse e insertar a MongoDB con JS, así:

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
"Puede sustituir otra base de datos para MongoDB proporcionando un controlador de base de datos del lado del servidor y / o un caché del lado del cliente que implemente una API alternativa. Mongo-livedata es un buen punto de partida para un proyecto de este tipo". - docs.meteor.com
LeeGee

Meteor fue escrito usando Node.js, así que me temo que esta respuesta no agrega nada nuevo ni cambia las cosas. Solo tiene un marco que cubre el cliente y el servidor.
Caltor

4

Dependiendo de su entorno, puede utilizar Rhino para hacer esto, consulte el sitio web de Rhino . Esto le da acceso a todas las bibliotecas de Java desde dentro de JavaScript.



2

Normalmente, necesita un lenguaje de scripting del lado del servidor como PHP para conectarse a MySQL, sin embargo, si solo está haciendo una maqueta rápida, puede usar http://www.mysqljs.com para conectarse a MySQL desde Javascript usando código como sigue:

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

Cabe mencionar que esta no es una forma segura de acceder a MySql y solo es adecuada para demostraciones privadas o escenarios en los que los usuarios finales no pueden acceder al código fuente, como en las aplicaciones de Phonegap para iOS.


Después de una inspección rápida, esto representa una amenaza de robo de las credenciales de la base de datos como se ve en la línea 6 de ese script que dicevar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas

@Dragas - Eso es correcto. javascript no tiene una forma nativa de conectarse a una base de datos mysql, por lo tanto, la dll mysql está alojada en el lado del servidor, de ahí la llamada AJAX. También significa que si está utilizando un firewall en el puerto 3306, debe abrirlo para las conexiones entrantes de mysqljs.com
Fiach Reid


1

Sí tu puedes. Los conectores MySQL usan TCP para la conexión, y en JS hay una pequeña versión modificada del cliente TCP llamada Websocket. Pero no puede conectarse directamente al servidor MySQL con websocket. Necesitará un puente de terceros entre websocket y mysql. Recibe la consulta de websocket, la envía a mysql, responde el resultado y la reenvía a JS.

Y este es mi puente de ejemplo escrito en C # con biblioteca de 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();
    }
}

Lado JS:

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

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

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

0

No.

Debe escribir un contenedor en PHP y luego exportar los datos devueltos (probablemente como Json). NUNCA, obtenga de su "_GET" el código SQL, ya que esto se llama inyección SQL (las personas que aprendan esto tendrán control total sobre su base de datos).

Este es un ejemplo que escribí:

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

Infórmese sobre las inyecciones SQL, por favor.


0

Puede conectarse a MySQL desde Javascript a través de un subprograma JAVA. El subprograma JAVA incrustaría el controlador JDBC para MySQL que le permitirá conectarse a MySQL.

Recuerde que si desea conectarse a un servidor MySQL remoto (que no sea del que descargó el subprograma), deberá solicitar a los usuarios que otorguen permisos extendidos al subprograma. De forma predeterminada, el subprograma solo puede conectarse al servidor desde el que se descargan.


0

Si no está bloqueado en MySQL, puede cambiar a PostgreSQL. Admite procedimientos de JavaScript (PL / V8) dentro de la base de datos. Es muy rápido y poderoso. Mira esta publicación .


0

JavaScript no puede conectarse directamente a la base de datos para obtener los datos necesarios, pero puede usar AJAX. Para facilitar la solicitud AJAX al servidor, puede usar jQuery JS framework http://jquery.com . Aquí hay un pequeño ejemplo

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
¿Dónde está la consulta MySQL en este ejemplo?
Michael

@Michael: Gran pregunta.
Connor Gurney

-1

Entendí su pregunta, creo que la está confundiendo con lenguajes como dot.net y java, donde puede abrir la conexión DB dentro de su código. No, JavaScript no puede conectarse directamente a MySQL ya que JavaScript es un lenguaje de scripting del lado del cliente (Exception Node.js). Necesita una capa intermedia como la API RESTful para acceder a los datos.


-3

Puede agregar una conexión mysql usando un archivo PHP. A continuación se muestra el ejemplo de archivo 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);
   ?> }

De hecho, no es una respuesta. La pregunta era Can JavaScript connect with MySQL?.
Alex.K.

Esto es cero por ciento relevante para la pregunta formulada. El autor de la pregunta ha sido muy específico sobre Javascript.
geekgugi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.