O JavaScript pode se conectar ao MySQL?

113

O JavaScript pode se conectar ao MySQL? Se sim, como?

Anônimo, o Grande
fonte
não, a menos que você não esteja falando sobre o JavaScript no navegador.
Luca Matteis
2
E quanto ao JavaScript do lado do servidor (por exemplo, através do Rhino)? podemos nos conectar a um banco de dados?
Joand de
7
Ou o Node.js também funcionará
Gabriel Fair,
1
Ignore todas as respostas nesta página porque estão todas erradas. Na verdade, isso pode ser feito. Consulte developer.chrome.com/apps/app_network
Pacerier
A resposta aceita está simplesmente errada (e estava em 2010 também). Esta resposta está correta.
TJ Crowder

Respostas:

26

Não, o JavaScript não pode se conectar diretamente ao MySQL. Mas você pode misturar JS com PHP para fazer isso.

JavaScript é uma linguagem do lado do cliente e seu banco de dados MySQL será executado em um servidor

Konradowy
fonte
87
pequena nota: o fato de o JavaScript ser executado no lado do cliente não tem NADA a ver com o fato de que ele não pode se conectar a um servidor de banco de dados. Pode ser muito bom (embora, altamente improvável) que uma versão futura da linguagem adicionaria APIs para acessar bancos de dados remotos.
Lucas Pottersky
3
Eu não chamaria isso de "misturar JS com PHP", no entanto. O que você pode fazer é deixar o código PHP gerar código / dados JavaScript (json, por exemplo) que ele recuperou do MySQL com antecedência. Ou você pode usar PHP em um servidor para fornecer uma interface http (json / REST / SOAP / ... qualquer) para acessar os dados que o código php recupera do MySQL - e essa interface http pode ser chamada pelo código JavaScript em execução em qualquer lugar, principalmente um brwoser. A partir de hoje, também não é mais atual dizer que o JavaScript é do lado do cliente - verifique o Node.js por exemplo.
Henning,
14
"JavaScript é uma linguagem do lado do cliente" Não necessariamente: não mais do que Java.
LeeGee
2
com a nova versão do mysql 5.7, o httpclient pode se comunicar diretamente com o banco de dados mysql usando o plugin http (construído para o mysql 5.7)
Atul Chaudhary
Não seria de alguma forma um risco de segurança para todos os navegadores que acessam seu site terem localmente o arquivo javascript que acessa diretamente seu servidor MySQL?
Vassilis
85

O JavaScript do lado do cliente não pode acessar o MySQL sem algum tipo de ponte. Mas as afirmações em negrito acima de que o JavaScript é apenas uma linguagem do lado do cliente estão incorretas - o JavaScript pode ser executado no lado do cliente e no lado do servidor, como no Node.js.

O Node.js pode acessar o MySQL por meio de algo como https://github.com/sidorares/node-mysql2

Você também pode desenvolver algo usando Socket.IO

Você quis dizer se um aplicativo JS do lado do cliente pode acessar o MySQL? Não tenho certeza se essas bibliotecas existem, mas são possíveis.

EDIT : Desde que escrevemos, agora temos cluster MySQL :

O MySQL Cluster JavaScript Driver para Node.js é exatamente o que parece - é um conector que pode ser chamado diretamente de seu código JavaScript para ler e gravar seus dados. Como ele acessa os nós de dados diretamente, não há latência extra ao passar por um servidor MySQL e precisa converter de objetos de código // JavaScript em operações SQL. Se, por algum motivo, você preferir que ele passe por um servidor MySQL (por exemplo, se estiver armazenando tabelas em InnoDB), então isso pode ser configurado.

LeeGee
fonte
53

Se você deseja se conectar a um banco de dados MySQL usando JavaScript, pode usar Node.js e uma biblioteca chamada mysql . Você pode criar consultas e obter resultados como uma matriz de registros. Se você quiser tentar, pode usar meu gerador de projeto para criar um back-end e escolher o MySQL como o banco de dados a ser conectado. Em seguida, apenas exponha sua nova API REST ou terminal GraphQL à sua frente e comece a trabalhar com seu banco de dados MySQL.


ANTIGA RESPOSTA DEIXADA PELA NOSTALGIA

ENTÃO

Pelo que entendi a pergunta e corrijo-me se estiver errado, ela se refere ao modelo de servidor clássico com JavaScript apenas no lado do cliente. Neste modelo clássico, com servidores LAMP (Linux, Apache, MySQL, PHP) a linguagem em contato com o banco de dados era o PHP, então para solicitar dados ao banco de dados você precisa escrever scripts PHP e ecoar os dados de retorno para o cliente. Basicamente, a distribuição das linguagens de acordo com as máquinas físicas era:

  1. Lado do servidor: PHP e MySQL.
  2. Lado do cliente: HTML / CSS e JavaScript.

Isso respondeu a um modelo MVC (Model, View, Controller) onde tínhamos a seguinte funcionalidade:

  1. MODELO: O modelo é o que lida com os dados, no caso, os scripts PHP que gerenciam as variáveis ​​ou que acessam os dados armazenados, neste caso em nosso banco de dados MySQL e os envia como dados JSON ao cliente.
  2. VISUALIZAÇÃO: A visualização é o que vemos e deve ser completamente independente do modelo. Ele só precisa mostrar os dados contidos no modelo, mas não deve conter dados relevantes. Nesse caso, a visualização usa HTML e CSS. HTML para criar a estrutura básica da visualização e CSS para dar forma a essa estrutura básica.
  3. CONTROLADOR: O controlador é a interface entre nosso modelo e nossa visão. Nesse caso, a linguagem utilizada é o JavaScript e ele pega os dados que o modelo nos envia como um pacote JSON e os coloca dentro dos containers que oferecem a estrutura HTML. A forma como o controlador interage com o modelo é usando AJAX . Usamos os métodos GET e POST para chamar scripts PHP no lado do servidor e para capturar os dados retornados do servidor.

Para o controlador, temos ferramentas realmente interessantes como jQuery , como uma biblioteca de "baixo nível" para controlar a estrutura HTML (DOM), e então novas, mais de alto nível como Knockout.js que nos permitem criar observadores que conectam diferentes Elementos DOM atualizando-os quando os eventos ocorrem. Existe também o Angular.js do Google que funciona de maneira semelhante, mas parece ser um ambiente completo. Para ajudá-lo a escolher entre eles, aqui você tem duas análises excelentes das duas ferramentas: Knockout vs. Angular.js e Knockout.js vs. Angular.js . Eu ainda estou lendo. Espero que eles ajudem você.

AGORA

Em servidores modernos baseados em Node.js, usamos JavaScript para tudo. Node.js é um ambiente JavaScript com muitas bibliotecas que funcionam com Google V8, motor Chrome JavaScript. A maneira como trabalhamos com esses novos servidores é:

  1. Node.js e Express : o mainframe onde o servidor é construído. Podemos criar um servidor com algumas linhas de código ou até mesmo usar bibliotecas como o Express para tornar ainda mais fácil a criação do servidor. Com Node.js e Express, gerenciaremos as petições dos clientes ao servidor e responderemos com as páginas apropriadas.
  2. Jade : Para criar as páginas usamos uma linguagem de templates, neste caso, Jade, que nos permite escrever páginas da web como escrevíamos HTML, mas com diferenças (leva um pouco de tempo, mas é fácil de aprender). Então, no código do servidor para responder às petições do cliente, precisamos apenas renderizar o código Jade em um código HTML "real".
  3. Stylus : Semelhante ao Jade, mas para CSS. Nesse caso, usamos uma função de middleware para converter o arquivo da caneta em um arquivo CSS real para nossa página.

Então, nós temos muitos pacotes que podemos instalar usando o NPM (gerenciador de pacotes Node.js) e usá-los diretamente em nosso servidor Node.js apenas exigindo (para aqueles que desejam aprender Node.js, experimente este tutorial para iniciantes para uma visão geral). E entre esses pacotes, você tem alguns deles para acessar bancos de dados. Usando isso, você pode usar JavaScript no lado do servidor para acessar meus bancos de dados SQL.

Mas o melhor que você pode fazer se for trabalhar com Node.js é usar os novos bancos de dados NoSQL, como MongoDB , com base em arquivos JSON. Em vez de armazenar tabelas como o MySQL, ele armazena os dados em estruturas JSON, para que você possa colocar dados diferentes dentro de cada estrutura, como vetores numéricos longos, em vez de criar tabelas enormes para o tamanho do maior.

Espero que esta breve explicação seja útil para você e, se quiser saber mais sobre isso, aqui estão alguns recursos que podem ser usados:

  • Egghead : Este site está cheio de ótimos tutoriais curtos sobre JavaScript e seu ambiente. Vale a pena tentar. E fazem descontos de vez em quando.
  • Code School : Com um curso gratuito e muito interessante sobre as ferramentas do Chrome Developer para ajudá-lo a testar o lado do cliente.
  • Codecademy : Com cursos gratuitos sobre HTML, CSS, JavaScript, jQuery e PHP que você pode acompanhar com exemplos online.
  • 10gen Education : Com tudo o que você precisa saber sobre o MongoDB em tutoriais para diferentes idiomas.
  • W3Schools : Este tem tutoriais sobre tudo isso e você pode usá-lo como um local de referência, pois tem muitos exemplos de shortcode realmente úteis.
  • Udacity : Um lugar com cursos em vídeo gratuitos sobre diversos assuntos com alguns interessantes sobre desenvolvimento web e o meu preferido, um incrível curso de WebGL para gráficos 3D com JavaScript.

Espero que ajude você a começar.

Diverta-se!

Timbergus
fonte
Boa resposta detalhada explicando a mecânica.
Duane
Obrigado :) Acabei de adicionar uma atualização ao final da resposta para resolver o problema. Você pode usar um servidor de nó com uma biblioteca chamada "mysql", e eu adicionei um link para um gerador de API que criei que você pode usar para iniciar um novo projeto de API. Espero que ajude.
Timbergus
Re "então": o JavaScript usado no lado do servidor remonta a 1995, quando foi incluído no Netscape Enterprise Server. A Microsoft colocou "JScript" em seu servidor IIS logo em seguida. O JavaScript no servidor não é, remotamente, novo.
TJ Crowder
Acho que seria bom se essa resposta tivesse as informações mais recentes no topo ou apenas excluísse as informações antigas desatualizadas. Também é um pouco prolixo e se concentra em idiomas específicos. A resposta curta é que JavaScript pode ser usado para se conectar a um banco de dados MySQL diretamente do Node.JS (ou outro ambiente de tempo de execução do lado do servidor), mas não do navegador devido à segurança deliberada do navegador.
Caltor
8

Acho que você precisaria adicionar algo como PHP na equação. PHP para interagir com o banco de dados e então você pode fazer chamadas AJAX com Javascript.

Kerry
fonte
8

Um pouco tarde, mas recentemente descobri que o MySql 5.7 tem um plug-in http através do qual o usuário pode se conectar diretamente ao mysql agora.

Procure Cliente Http para mysql 5.7

Atul Chaudhary
fonte
7

A resposta simples é: não.

JavaScript é uma linguagem do lado do cliente executada no navegador ( não obstante o node.js ) e o MySQL é uma tecnologia do lado do servidor executada no servidor.

Isso significa que você normalmente usa uma linguagem do lado do servidor como ASP.NET ou PHP para se conectar ao banco de dados.

Dean Harding
fonte
Javascript (no lado do cliente, forma de navegador) é usado todos os dias para se conectar com tecnologias do lado do servidor (Apache, Nginx, PHP, NodeJS, etc) em execução no servidor. A própria definição de servidor / cliente exige que a "divisão" entre eles seja superável.
jeteon
6

SIM? Dê uma olhada em um meteoro. Links:

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

Não entendo como isso é feito. Mas a Nettuts + colocou isso na seção javascript-ajax, talvez mágica aconteça.

Também mostra alguma maneira de conectar e inserir no MongoDB com JS, como este:

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});
Ivan Wang
fonte
1
"Você pode substituir outro banco de dados pelo MongoDB fornecendo um driver de banco de dados do lado do servidor e / ou um cache do lado do cliente que implementa uma API alternativa. O mongo-vivata é um bom ponto de partida para tal projeto." - docs.meteor.com
LeeGee
O Meteor foi escrito usando Node.js, então temo que esta resposta não adicione nada de novo ou mude as coisas. Você só tem uma estrutura que cobre cliente e servidor.
Caltor
4

Dependendo do seu ambiente, você pode usar o Rhino para fazer isso, consulte o site do Rhino . Isso lhe dá acesso a todas as bibliotecas Java de dentro do JavaScript.

Kusmeroglu
fonte
4

Sim. Existe um plugin HTTP para MySQL.

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

Estou apenas pesquisando sobre isso agora, o que me levou a esta questão stackoverflow. Você deve ser capaz de usar AJAX em um banco de dados MySQL agora ou no futuro próximo (eles afirmam que não está pronto para produção).

Nick Manning
fonte
2

Normalmente, você precisa de uma linguagem de script do lado do servidor, como PHP, para se conectar ao MySQL; no entanto, se você estiver apenas fazendo uma maquete rápida, poderá usar http://www.mysqljs.com para se conectar ao MySQL a partir de Javascript usando o código como segue:

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

Deve-se mencionar que esta não é uma forma segura de acessar o MySql e só é adequada para demonstrações privadas ou cenários onde o código-fonte não pode ser acessado por usuários finais, como em aplicativos iOS Phonegap.

Fiach Reid
fonte
Após uma inspeção rápida, isso representa uma ameaça de roubo de credenciais do banco de dados, conforme visto pela linha 6 naquele script que afirmavar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas
@Dragas - Isso mesmo. javascript não tem uma maneira nativa de se conectar a um banco de dados mysql, portanto, a dll mysql é hospedada no lado do servidor, daí a chamada AJAX. Isso também significa que se você estiver usando um firewall na porta 3306, você precisa abri-lo para conexões de entrada de mysqljs.com
Fiach Reid
1

Você pode enviar solicitações AJAX para alguns wrappers RESTful do lado do servidor para MySQL, como DBSlayer , PhpRestSQL ou AlsoSQL (para Drizzle , um fork do MySQL).

Niutech
fonte
1

Sim você pode. Os conectores MySQL usam TCP para conexão, e em JS há uma pequena versão modificada do cliente TCP chamada Websocket. Mas você não pode se conectar diretamente ao servidor MySQL com websocket. Você precisará de alguma ponte de terceiros entre o websocket e o mysql. Recebe a consulta do websocket, envia para o mysql, responde o resultado e reenvia para JS.

E este é meu exemplo de bridge escrito em C # com biblioteca 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");
Chuva de ideias
fonte
0

Não.

Você precisa escrever um wrapper em PHP e, em seguida, exportar os dados retornados (provavelmente como Json). NUNCA, obtenha do seu "_GET" o código SQL, pois isso é chamado de injeção SQL (as pessoas que aprenderem isso terão controle total sobre o seu banco de dados).

Este é um exemplo que escrevi:

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

Aprenda sobre injeções de SQL, por favor.

elcuco
fonte
0

Você pode se conectar ao MySQL a partir de Javascript por meio de um miniaplicativo JAVA. O miniaplicativo JAVA incorporaria o driver JDBC para MySQL que permitirá a conexão com o MySQL.

Lembre-se de que se quiser se conectar a um servidor MySQL remoto (diferente daquele de onde baixou o miniaplicativo), você precisará pedir aos usuários que concedam permissões estendidas ao miniaplicativo. Por padrão, o miniaplicativo só pode se conectar ao servidor de onde foram baixados.

Rajiv
fonte
0

Se você não está bloqueado no MySQL, pode alternar para PostgreSQL. Ele suporta procedimentos JavaScript (PL / V8) dentro do banco de dados. É muito rápido e poderoso. Confira esta postagem .

ramigg
fonte
0

JavaScript não pode se conectar diretamente ao banco de dados para obter os dados necessários, mas você pode usar AJAX. Para fazer uma solicitação AJAX fácil para o servidor, você pode usar o framework jQuery JS http://jquery.com . Aqui está um pequeno exemplo

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);
VP
fonte
1
onde está a consulta MySQL neste exemplo?
Michael
@Michael: Ótima pergunta.
Connor Gurney
-1

Eu entendi sua pergunta, acho que você está confundindo com linguagens como dot.net e java, onde você pode abrir uma conexão DB dentro do seu código. Não, o JavaScript não pode se conectar diretamente ao MySQL, pois o JavaScript é uma linguagem de script do lado do cliente (Exception Node.js). Você precisa de uma camada intermediária como a API RESTful para acessar os dados.

Sagitário
fonte
-3

Você pode adicionar a conexão mysql usando o arquivo PHP. Abaixo está o exemplo de arquivo 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);
   ?> }
Shivu09
fonte
Na verdade, não é uma resposta. A questão era Can JavaScript connect with MySQL?.
Alex.K.
Isso é zero por cento relevante para a pergunta feita. O autor da pergunta foi muito específico sobre Javascript.
geekgugi