JavaScript può connettersi con MySQL?


113

JavaScript può connettersi con MySQL? Se é cosi, come?


no, a meno che tu non stia parlando di JavaScript nel browser.
Luca Matteis

2
E per quanto riguarda JavaScript lato server (ad esempio tramite Rhino)? possiamo connetterci a un database?
Joand

7
Oppure funzionerà anche Node.js
Gabriel Fair

1
Ignora tutte le risposte in questa pagina perché sono tutte sbagliate. In effetti, si può fare. Vedi developer.chrome.com/apps/app_network
Pacerier

La risposta accettata è semplicemente sbagliata (ed era anche nel 2010). Questa risposta è corretta.
TJ Crowder

Risposte:


26

No, JavaScript non può connettersi direttamente a MySQL. Ma puoi mescolare JS con PHP per farlo.

JavaScript è un linguaggio lato client e il tuo database MySQL verrà eseguito su un server


87
piccola nota: il fatto che JavaScript venga eseguito sul lato client non ha NULLA a che fare con il fatto che non può connettersi a un server database. Potrebbe essere molto positivo (anche se altamente improbabile) che una versione futura del linguaggio aggiunga API per accedere ai database remoti.
Lucas Pottersky

3
Tuttavia, non lo chiamerei "mescolare JS con PHP". Quello che potresti fare è lasciare che il codice PHP generi codice / dati JavaScript (json, ad esempio) che ha recuperato da MySQL in anticipo. Oppure potresti usare PHP su un server per fornire un'interfaccia http (json / REST / SOAP / ... qualunque) per accedere ai dati che il codice php recupera da MySQL - e questa interfaccia http può essere chiamata da codice JavaScript in esecuzione ovunque, principalmente un brwoser. Ad oggi, anche dire che JavaScript è lato client non è più attuale: controlla ad esempio Node.js.
Henning

14
"JavaScript è un linguaggio lato client" Non necessariamente: non più di Java.
LeeGee

2
con la nuova versione di mysql 5.7 httpclient può comunicare direttamente con il database mysql utilizzando il plugin http (costruito per mysql 5.7)
Atul Chaudhary

Non sarebbe in qualche modo un rischio per la sicurezza per tutti i browser che accedono al tuo sito avere localmente il file javascript che accede direttamente al tuo server MySQL?
Vassilis

85

JavaScript lato client non può accedere a MySQL senza un qualche tipo di bridge. Ma le affermazioni in grassetto sopra che JavaScript è solo un linguaggio lato client non sono corrette: JavaScript può essere eseguito lato client e lato server, come con Node.js.

Node.js può accedere a MySQL tramite qualcosa come https://github.com/sidorares/node-mysql2

Potresti anche sviluppare qualcosa usando Socket.IO

Volevi chiedere se un'app JS lato client può accedere a MySQL? Non sono sicuro che tali biblioteche esistano, ma sono possibili.

EDIT : dalla scrittura, ora abbiamo MySQL Cluster :

Il driver JavaScript MySQL Cluster per Node.js è proprio quello che sembra: è un connettore che può essere chiamato direttamente dal tuo codice JavaScript per leggere e scrivere i tuoi dati. Poiché accede direttamente ai nodi di dati, non vi è alcuna latenza aggiuntiva dal passaggio attraverso un server MySQL ed è necessario convertire dal codice JavaScript // oggetti in operazioni SQL. Se per qualche motivo preferisci che passi attraverso un server MySQL (ad esempio se stai archiviando tabelle in InnoDB), allora puoi configurarlo.


53

Se vuoi connetterti a un database MySQL usando JavaScript, puoi usare Node.js e una libreria chiamata mysql . È possibile creare query e ottenere risultati come un array di registri. Se vuoi provarlo, puoi usare il mio generatore di progetti per creare un backend e scegliere MySQL come database a cui connetterti. Quindi, esponi la tua nuova API REST o endpoint GraphQL in primo piano e inizia a lavorare con il tuo database MySQL.


VECCHIA RISPOSTA LASCIATA DA NOSTALGIA

POI

Poiché comprendo la domanda e correggo se sbaglio, si riferisce al modello di server classico con JavaScript solo sul lato client. In questo modello classico, con i server LAMP (Linux, Apache, MySQL, PHP) il linguaggio a contatto con il database era PHP, quindi per richiedere dati al database è necessario scrivere script PHP ed echeggiare i dati restituiti al client. Fondamentalmente, la distribuzione delle lingue in base alle macchine fisiche era:

  1. Lato server: PHP e MySQL.
  2. Lato client: HTML / CSS e JavaScript.

Questo ha risposto a un modello MVC (Model, View, Controller) in cui avevamo le seguenti funzionalità:

  1. MODELLO: Il modello è quello che si occupa dei dati, in questo caso, gli script PHP che gestiscono le variabili o che accedono ai dati memorizzati, in questo caso nel nostro database MySQL e li inviano come dati JSON al client.
  2. VISTA: la vista è ciò che vediamo e dovrebbe essere completamente indipendente dal modello. Deve solo mostrare i dati contenuti nel modello, ma non dovrebbe contenere dati rilevanti. In questo caso, la vista utilizza HTML e CSS. HTML per creare la struttura di base della vista e CSS per dare la forma a questa struttura di base.
  3. CONTROLLER: Il controller è l'interfaccia tra il nostro modello e il nostro punto di vista. In questo caso, il linguaggio utilizzato è JavaScript e prende i dati che il modello ci invia come pacchetto JSON e li inserisce all'interno dei contenitori che offrono la struttura HTML. Il modo in cui il controller interagisce con il modello è utilizzando AJAX . Usiamo i metodi GET e POST per chiamare gli script PHP sul lato server e per catturare i dati restituiti dal server.

Per il controller, abbiamo strumenti davvero interessanti come jQuery , come libreria "di basso livello" per controllare la struttura HTML (DOM), e poi nuovi strumenti più di alto livello come Knockout.js che ci permettono di creare osservatori che collegano diversi Elementi DOM che li aggiornano quando si verificano eventi. C'è anche Angular.js di Google che funziona in modo simile, ma sembra essere un ambiente completo. Per aiutarti a scegliere tra loro, ecco due ottime analisi dei due strumenti: Knockout vs. Angular.js e Knockout.js vs. Angular.js . Sto ancora leggendo. Spero ti aiutino.

ADESSO

Nei server moderni basati su Node.js, utilizziamo JavaScript per tutto. Node.js è un ambiente JavaScript con molte librerie che funzionano con Google V8, il motore JavaScript di Chrome. Il modo in cui lavoriamo con questi nuovi server è:

  1. Node.js ed Express : il mainframe in cui è costruito il server. Possiamo creare un server con poche righe di codice o persino utilizzare librerie come Express per rendere ancora più semplice la creazione del server. Con Node.js ed Express, gestiremo le petizioni al server dai client e risponderemo con le pagine appropriate.
  2. Giada : Per creare le pagine utilizziamo un linguaggio di template, in questo caso Jade, che ci permette di scrivere pagine web come stavamo scrivendo HTML ma con differenze (richiede un po 'di tempo ma è facile da imparare). Quindi, nel codice del server per rispondere alle petizioni del cliente, dobbiamo solo rendere il codice Jade in un codice HTML "reale".
  3. Stilo : simile a Jade ma per CSS. In questo caso, utilizziamo una funzione middleware per convertire il file dello stilo in un vero file CSS per la nostra pagina.

Quindi abbiamo molti pacchetti che possiamo installare usando NPM (gestore di pacchetti Node.js) e usarli direttamente nel nostro server Node.js solo richiedendolo (per quelli di voi che vogliono imparare Node.js, provate questo tutorial per principianti per una panoramica). E tra questi pacchetti, ne hai alcuni per accedere ai database. Usando questo puoi usare JavaScript sul lato server per accedere ai miei database SQL.

Ma il meglio che puoi fare se hai intenzione di lavorare con Node.js è usare i nuovi database NoSQL come MongoDB , basati su file JSON. Invece di memorizzare tabelle come MySQL, memorizza i dati in strutture JSON, quindi puoi inserire dati diversi all'interno di ciascuna struttura come lunghi vettori numerici invece di creare tabelle enormi per le dimensioni della più grande.

Spero che questa breve spiegazione ti sia utile e, se vuoi saperne di più, ecco alcune risorse che puoi utilizzare:

  • Egghead : questo sito è pieno di fantastici brevi tutorial su JavaScript e il suo ambiente. Vale la pena provare. E gli sconti di tanto in tanto.
  • Code School : con un corso gratuito e molto interessante sugli strumenti per sviluppatori di Chrome per aiutarti a testare il lato client.
  • Codecademy : con corsi gratuiti su HTML, CSS, JavaScript, jQuery e PHP che puoi seguire con esempi online.
  • 10gen Education : con tutto ciò che devi sapere su MongoDB in tutorial per diverse lingue.
  • W3Schools : questo ha tutorial su tutto questo e puoi usarlo come punto di riferimento perché ha molti esempi di shortcode davvero utili.
  • Udacity : un luogo con corsi video gratuiti su diversi argomenti con alcuni interessanti sullo sviluppo web e il mio preferito, un fantastico corso WebGL per grafica 3D con JavaScript.

Spero che ti aiuti a iniziare.

Divertiti!


Bella risposta dettagliata che spiega la meccanica.
Duane

Grazie :) Ho appena aggiunto un aggiornamento alla fine della risposta per risolvere il problema. Puoi utilizzare un server nodo con una libreria chiamata "mysql" e ho aggiunto un collegamento a un generatore di API che ho creato che puoi utilizzare per avviare un nuovo progetto API. Spero che sia d'aiuto.
Timbergus

Ri "allora": JavaScript utilizzato lato server risale al 1995, quando fu incluso in Netscape Enterprise Server. Subito dopo Microsoft inserì "JScript" nel suo server IIS. JavaScript sul server non è, in remoto, nuovo.
TJ Crowder

Penso che sarebbe bello se questa risposta avesse le informazioni più recenti in alto o semplicemente eliminasse le vecchie informazioni obsolete. È anche un po 'prolisso e si concentra su lingue particolari. La risposta breve è che JavaScript può essere utilizzato per connettersi a un database MySQL direttamente da Node.JS (o altro ambiente di runtime lato server) ma non dal browser a causa della deliberata sicurezza del browser.
Caltor

8

Penso che dovresti aggiungere qualcosa come PHP nell'equazione. PHP per interagire con il database e quindi è possibile effettuare chiamate AJAX con Javascript.


8

Un po 'in ritardo, ma di recente ho scoperto che MySql 5.7 ha il plug-in http tramite il quale l'utente può connettersi direttamente a mysql ora.

Cerca Http Client per mysql 5.7


7

La risposta semplice è: no.

JavaScript è un linguaggio lato client che viene eseguito nel browser ( nonostante node.js ) e MySQL è una tecnologia lato server che gira sul server.

Ciò significa che in genere si utilizza un linguaggio lato server come ASP.NET o PHP per connettersi al database.


Javascript (nel lato client, modulo browser) viene utilizzato ogni giorno per connettersi con tecnologie lato server (Apache, Nginx, PHP, NodeJS, ecc.) In esecuzione sul server. La definizione stessa di server / client richiede che il "divario" tra loro sia superabile.
jeteon

6

SÌ? Dai un'occhiata a una meteora. link:

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

Non capisco come sia fatto. Ma Nettuts + ha messo questa cosa nella sezione javascript-ajax, forse accade la magia.

Mostra anche un modo per connettersi e inserire in MongoDB con JS, in questo modo:

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
"È possibile sostituire un altro database per MongoDB fornendo un driver di database lato server e / o una cache lato client che implementa un'API alternativa. Il mongo-livesata è un buon punto di partenza per un tale progetto." - docs.meteor.com
LeeGee

Meteor è stato scritto usando Node.js quindi temo che questa risposta non aggiunga nulla di nuovo o cambi le cose. Hai solo un framework che copre client e server.
Caltor,

4

A seconda del proprio ambiente, è possibile utilizzare Rhino per farlo, vedere il sito Web di Rhino . Questo ti dà accesso a tutte le librerie Java da JavaScript.



2

In genere, è necessario un linguaggio di scripting lato server come PHP per connettersi a MySQL, tuttavia, se si sta solo eseguendo un mockup veloce, è possibile utilizzare http://www.mysqljs.com per connettersi a MySQL da Javascript utilizzando il codice come segue:

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

Va detto che questo non è un modo sicuro per accedere a MySql ed è adatto solo per demo private o scenari in cui il codice sorgente non è accessibile agli utenti finali, come nelle app iOS di Phonegap.


Dopo una rapida ispezione, ciò rappresenta una minaccia per il furto delle credenziali del database come si vede dalla riga 6 di quello script che affermavar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas

@ Dragas - Esatto. javascript non ha un modo nativo per connettersi a un database mysql, quindi la dll mysql è ospitata sul lato server, da cui la chiamata AJAX. Significa anche che se stai utilizzando un firewall sulla porta 3306, devi aprirlo alle connessioni in entrata da mysqljs.com
Fiach Reid


1

Si, puoi. I connettori MySQL utilizzano TCP per la connessione e in JS esiste una versione leggermente modificata del client TCP chiamata Websocket. Ma non puoi connetterti direttamente al server MySQL con websocket. Avrai bisogno di un ponte di terze parti tra websocket e mysql. Riceve la query da websocket, la invia a mysql, il risultato della risposta e la rinvia a JS.

E questo è il mio bridge di esempio scritto in C # con la libreria 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();
    }
}

Lato JS:

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

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

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

0

No.

È necessario scrivere un wrapper in PHP e quindi esportare i dati restituiti (probabilmente come Json). MAI, ottenere dal tuo "_GET" il codice SQL, poiché questo è chiamato iniezione SQL (le persone che imparano questo avranno il pieno controllo sul tuo database).

Questo è un esempio che ho scritto:

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

Impara le iniezioni SQL per favore.


0

Puoi connetterti a MySQL da Javascript tramite un'applet JAVA. L'applet JAVA incorporerebbe il driver JDBC per MySQL che ti consentirà di connetterti a MySQL.

Ricorda che se vuoi connetterti a un server MySQL remoto (diverso da quello da cui hai scaricato l'applet) dovrai chiedere agli utenti di concedere permessi estesi all'applet. Per impostazione predefinita, l'applet può connettersi solo al server da cui viene scaricata.


0

Se non sei bloccato su MySQL, puoi passare a PostgreSQL. Supporta le procedure JavaScript (PL / V8) all'interno del database. È molto veloce e potente. Dai un'occhiata a questo post .


0

JavaScript non può connettersi direttamente al DB per ottenere i dati necessari, ma puoi utilizzare AJAX. Per semplificare la richiesta AJAX al server puoi utilizzare jQuery JS framework http://jquery.com . Ecco un piccolo esempio

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
dov'è la query MySQL in questo esempio?
Michael

@ Michael: ottima domanda.
Connor Gurney

-1

Ho capito la tua domanda, penso che tu la stia confondendo con linguaggi come dot.net e java in cui puoi aprire la connessione DB all'interno del tuo codice. No, JavaScript non può connettersi direttamente a MySQL poiché JavaScript è un linguaggio di scripting lato client (Exception Node.js). Per accedere ai dati è necessario un livello intermedio come l'API RESTful.


-3

Puoi aggiungere una connessione mysql usando il file PHP. Di seguito è riportato l'esempio di file 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);
   ?> }

In realtà, non è una risposta. La domanda era Can JavaScript connect with MySQL?.
Alex.K.

Questo è lo zero percento rilevante per la domanda posta. L'autore della domanda è stato molto specifico su Javascript.
geekgugi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.