Kann JavaScript eine Verbindung mit MySQL herstellen?

113

Kann JavaScript eine Verbindung mit MySQL herstellen? Wenn das so ist, wie?

Anonym der Große
quelle
Nein, es sei denn, Sie sprechen nicht über das JavaScript im Browser.
Luca Matteis
2
Was ist mit serverseitigem JavaScript (z. B. über Rhino)? Können wir uns mit einer Datenbank verbinden?
Joand
7
Oder Node.js wird auch funktionieren
Gabriel Fair
1
Ignorieren Sie alle Antworten auf dieser Seite, da sie alle falsch sind. In der Tat kann es getan werden. Siehe developer.chrome.com/apps/app_network
Pacerier
Die akzeptierte Antwort ist einfach falsch (und war auch 2010). Diese Antwort ist richtig.
TJ Crowder

Antworten:

26

Nein, JavaScript kann keine direkte Verbindung zu MySQL herstellen. Sie können dazu jedoch JS mit PHP mischen.

JavaScript ist eine clientseitige Sprache und Ihre MySQL-Datenbank wird auf einem Server ausgeführt

konradowy
quelle
87
kleiner Hinweis: Die Tatsache, dass JavaScript auf der Clientseite ausgeführt wird, hat NICHTS damit zu tun, dass keine Verbindung zu einem Datenbankserver hergestellt werden kann. Es könnte sehr gut (allerdings höchst unwahrscheinlich) sein, dass eine zukünftige Version der Sprache APIs für den Zugriff auf entfernte Datenbanken hinzufügt.
Lucas Pottersky
3
Ich würde das allerdings nicht "JS mit PHP mischen" nennen. Was Sie tun können, ist, PHP-Code JavaScript-Code / Daten (z. B. json) generieren zu lassen, die zuvor von MySQL abgerufen wurden. Oder Sie können PHP auf einem Server verwenden, um eine http-Schnittstelle (json / REST / SOAP / ... was auch immer) für den Zugriff auf Daten bereitzustellen, die der PHP-Code von MySQL abruft. Diese http-Schnittstelle kann hauptsächlich von JavaScript-Code aufgerufen werden, der überall ausgeführt wird ein brwoser. Ab heute ist es nicht mehr aktuell zu sagen, dass JavaScript clientseitig ist - überprüfen Sie beispielsweise Node.js.
Henning
14
"JavaScript ist eine clientseitige Sprache" Nicht unbedingt: nicht mehr als Java.
LeeGee
2
Mit der neuen Version von MySQL 5.7 kann httpclient direkt mit der MySQL-Datenbank über das http-Plugin (erstellt für MySQL 5.7) kommunizieren
Atul Chaudhary
Wäre es nicht irgendwie ein Sicherheitsrisiko für alle Browser, die auf Ihre Site zugreifen, lokal über die Javascript-Datei zu verfügen, die direkt auf Ihren MySQL-Server zugreift?
Vassilis
85

Clientseitiges JavaScript kann ohne eine Brücke nicht auf MySQL zugreifen. Die obigen kühnen Aussagen, dass JavaScript nur eine clientseitige Sprache ist, sind jedoch falsch. JavaScript kann wie bei Node.js clientseitig und serverseitig ausgeführt werden.

Node.js kann über https://github.com/sidorares/node-mysql2 auf MySQL zugreifen

Sie können auch etwas mit Socket.IO entwickeln

Wollten Sie fragen, ob eine clientseitige JS-App auf MySQL zugreifen kann? Ich bin nicht sicher, ob solche Bibliotheken existieren, aber sie sind möglich.

EDIT : Seit dem Schreiben haben wir jetzt MySQL Cluster :

Der MySQL Cluster JavaScript-Treiber für Node.js ist genau das, wonach es sich anhört - es ist ein Connector, der direkt aus Ihrem JavaScript-Code aufgerufen werden kann, um Ihre Daten zu lesen und zu schreiben. Da es direkt auf die Datenknoten zugreift, gibt es keine zusätzliche Latenz beim Durchlaufen eines MySQL-Servers und es muss von // JavaScript-Codeobjekten in SQL-Operationen konvertiert werden. Wenn Sie es aus irgendeinem Grund vorziehen, einen MySQL-Server zu durchlaufen (z. B. wenn Sie Tabellen in InnoDB speichern), kann dies konfiguriert werden.

LeeGee
quelle
53

Wenn Sie mit JavaScript eine Verbindung zu einer MySQL-Datenbank herstellen möchten, können Sie Node.js und eine Bibliothek namens mysql verwenden . Sie können Abfragen erstellen und Ergebnisse als Array von Registern abrufen. Wenn Sie es ausprobieren möchten, können Sie mit meinem Projektgenerator ein Backend erstellen und MySQL als Datenbank für die Verbindung auswählen . Stellen Sie dann einfach Ihre neue REST-API oder Ihren neuen GraphQL- Endpunkt vor und beginnen Sie mit der Arbeit mit Ihrer MySQL-Datenbank.


ALTE ANTWORT VON NOSTALGIA

DANN

Da ich die Frage verstehe und mich korrigiere, wenn ich falsch liege, bezieht sie sich nur auf der Clientseite auf das klassische Servermodell mit JavaScript. In diesem klassischen Modell, mit LAMP - Server (Linux, Apache, MySQL, PHP) die Sprache , in Kontakt mit der Datenbank war PHP, so auf Anfrage Daten in die Datenbank , die Sie benötigen PHP - Skripte und schreiben echo die zurückkehrenden Daten an den Client. Grundsätzlich war die Verteilung der Sprachen nach physischen Maschinen:

  1. Serverseite: PHP und MySQL.
  2. Client-Seite: HTML / CSS und JavaScript.

Dies antwortete auf ein MVC-Modell (Modell, Ansicht, Controller), bei dem wir die folgenden Funktionen hatten:

  1. MODELL: Das Modell behandelt die Daten, in diesem Fall die PHP-Skripte, die Variablen verwalten oder auf gespeicherte Daten zugreifen, in diesem Fall in unserer MySQL-Datenbank, und sendet sie als JSON-Daten an den Client.
  2. ANSICHT: Die Ansicht ist das, was wir sehen und sie sollte völlig unabhängig vom Modell sein. Es muss nur die im Modell enthaltenen Daten anzeigen, es sollten jedoch keine relevanten Daten enthalten sein. In diesem Fall verwendet die Ansicht HTML und CSS. HTML, um die Grundstruktur der Ansicht zu erstellen, und CSS, um dieser Grundstruktur die Form zu geben.
  3. CONTROLLER: Der Controller ist die Schnittstelle zwischen unserem Modell und unserer Ansicht. In diesem Fall wird JavaScript als Sprache verwendet. Die vom Modell gesendeten Daten werden als JSON-Paket verwendet und in die Container eingefügt, die die HTML-Struktur bieten. Die Art und Weise, wie der Controller mit dem Modell interagiert, erfolgt mithilfe von AJAX . Wir verwenden GET- und POST- Methoden, um PHP-Skripte auf der Serverseite aufzurufen und die vom Server zurückgegebenen Daten abzufangen.

Für den Controller haben wir wirklich interessante Tools wie jQuery als "Low-Level" -Bibliothek zur Steuerung der HTML-Struktur (DOM) und dann neue, übergeordnete als Knockout.js , mit denen wir Beobachter erstellen können, die unterschiedliche Verbindungen herstellen DOM-Elemente aktualisieren sie, wenn Ereignisse auftreten. Es gibt auch Angular.js von Google, das auf ähnliche Weise funktioniert, aber eine vollständige Umgebung zu sein scheint. Um Ihnen bei der Auswahl zu helfen, finden Sie hier zwei hervorragende Analysen der beiden Tools: Knockout vs. Angular.js und Knockout.js vs. Angular.js . Ich lese immer noch. Hoffe sie helfen dir.

JETZT

In modernen Servern, die auf Node.js basieren, verwenden wir JavaScript für alles. Node.js ist eine JavaScript-Umgebung mit vielen Bibliotheken, die mit Google V8, Chrome JavaScript Engine, arbeiten. Wir arbeiten mit diesen neuen Servern wie folgt:

  1. Node.js und Express : Der Mainframe, auf dem der Server erstellt wird. Wir können einen Server mit wenigen Codezeilen erstellen oder sogar Bibliotheken wie Express verwenden, um die Erstellung des Servers noch einfacher zu gestalten. Mit Node.js und Express verwalten wir die Petitionen von den Clients an den Server und beantworten sie mit den entsprechenden Seiten.
  2. Jade : Um die Seiten zu erstellen, verwenden wir eine Vorlagensprache, in diesem Fall Jade, die es uns ermöglicht, Webseiten so zu schreiben, wie wir HTML geschrieben haben, jedoch mit Unterschieden (es dauert etwas, ist aber leicht zu erlernen). Dann müssen wir im Code des Servers, um die Petitionen des Clients zu beantworten, nur den Jade-Code in einen "echten" HTML-Code umwandeln.
  3. Stift : Ähnlich wie Jade, jedoch für CSS. In diesem Fall verwenden wir eine Middleware-Funktion, um die Stiftdatei in eine echte CSS-Datei für unsere Seite zu konvertieren.

Dann haben wir viele Pakete, die wir mit dem NPM (Node.js-Paketmanager) installieren und direkt auf unserem Node.js-Server verwenden können, der dies nur benötigt (für diejenigen unter Ihnen, die Node.js lernen möchten, probieren Sie dieses Anfänger-Tutorial aus für eine Übersicht). Und unter diesen Paketen haben Sie einige, um auf Datenbanken zuzugreifen. Mit dieser Option können Sie serverseitig JavaScript verwenden, um auf My SQL-Datenbanken zuzugreifen.

Das Beste, was Sie tun können, wenn Sie mit Node.js arbeiten möchten, ist die Verwendung der neuen NoSQL-Datenbanken wie MongoDB , die auf JSON-Dateien basieren. Anstatt Tabellen wie MySQL zu speichern, werden die Daten in JSON-Strukturen gespeichert, sodass Sie unterschiedliche Daten wie lange numerische Vektoren in jede Struktur einfügen können, anstatt große Tabellen für die Größe der größten zu erstellen.

Ich hoffe, diese kurze Erklärung wird für Sie nützlich, und wenn Sie mehr darüber erfahren möchten, haben Sie hier einige Ressourcen, die Sie verwenden können:

  • Egghead : Diese Seite ist voll von tollen kurzen Tutorials über JavaScript und seine Umgebung. Es ist einen Versuch wert. Und die machen von Zeit zu Zeit Rabatte.
  • Code School : Mit einem kostenlosen und sehr interessanten Kurs über Chrome Developer-Tools, mit dem Sie die Clientseite testen können.
  • Codecademy : Mit kostenlosen Kursen zu HTML, CSS, JavaScript, jQuery und PHP, denen Sie mit Online-Beispielen folgen können.
  • 10gen Education : Mit allem, was Sie über MongoDB wissen müssen, in Tutorials für verschiedene Sprachen.
  • W3Schools : Diese enthält Tutorials zu all dem und Sie können sie als Referenz verwenden, da sie viele wirklich nützliche Shortcode-Beispiele enthält.
  • Udacity : Ein Ort mit kostenlosen Videokursen zu verschiedenen Themen mit einigen interessanten Themen zur Webentwicklung und meinem bevorzugten, erstaunlichen WebGL-Kurs für 3D-Grafiken mit JavaScript.

Ich hoffe es hilft dir anzufangen.

Habe Spaß!

Timbergus
quelle
Schöne ausführliche Antwort, die die Mechanik erklärt.
Duane
Danke :) Ich habe gerade ein Update am Ende der Antwort hinzugefügt, um das Problem zu lösen. Sie können einen Knotenserver mit einer Bibliothek namens "mysql" verwenden. Ich habe einen Link zu einem von mir erstellten API-Generator hinzugefügt, mit dem Sie ein neues API-Projekt starten können. Ich hoffe es hilft.
Timbergus
Betreff "dann": Serverseitig verwendetes JavaScript geht auf das Jahr 1995 zurück, als es in Netscape Enterprise Server enthalten war. Microsoft hat bald darauf "JScript" auf seinen IIS-Server gestellt. JavaScript auf dem Server ist nicht aus der Ferne neu.
TJ Crowder
Ich denke, es wäre gut, wenn diese Antwort die neuesten Informationen oben hätte oder einfach die alten veralteten Informationen löschen würde. Es ist auch etwas ausführlich und konzentriert sich auf bestimmte Sprachen. Die kurze Antwort lautet, dass JavaScript verwendet werden kann, um eine direkte Verbindung zu einer MySQL-Datenbank über Node.JS (oder eine andere serverseitige Laufzeitumgebung) herzustellen, jedoch aus Gründen der absichtlichen Browsersicherheit nicht über den Browser.
Caltor
8

Ich denke, Sie müssten so etwas wie PHP in die Gleichung einfügen. PHP, um mit der Datenbank zu interagieren und dann könnten Sie AJAX-Aufrufe mit Javascript machen.

Kerry
quelle
8

Etwas spät, aber kürzlich habe ich herausgefunden, dass MySql 5.7 ein http-Plugin hat, über das der Benutzer jetzt direkt eine Verbindung zu MySQL herstellen kann.

Suchen Sie nach Http Client für MySQL 5.7

Atul Chaudhary
quelle
7

Einfache Antwort ist: nein.

JavaScript ist eine clientseitige Sprache, die im Browser ausgeführt wird ( ungeachtet node.js ), und MySQL ist eine serverseitige Technologie, die auf dem Server ausgeführt wird.

Das bedeutet, dass Sie normalerweise eine serverseitige Sprache wie ASP.NET oder PHP verwenden, um eine Verbindung zur Datenbank herzustellen.

Dean Harding
quelle
Javascript (in clientseitiger Browserform) wird täglich verwendet, um eine Verbindung zu serverseitigen Technologien (Apache, Nginx, PHP, NodeJS usw.) herzustellen, die auf dem Server ausgeführt werden. Die Definition von Server / Client erfordert, dass die "Kluft" zwischen ihnen überwunden werden kann.
Jeteon
6

JA? Schauen Sie sich einen Meteor an. Links:

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

Ich verstehe nicht, wie es gemacht wird. Aber Nettuts + hat dieses Ding in den Javascript-Ajax-Bereich aufgenommen, vielleicht passiert Magie.

Es zeigt auch eine Möglichkeit, mit JS eine Verbindung zu MongoDB herzustellen und einzufügen, wie folgt:

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
quelle
1
"Sie können MongoDB durch eine andere Datenbank ersetzen, indem Sie einen serverseitigen Datenbanktreiber und / oder einen clientseitigen Cache bereitstellen, der eine alternative API implementiert. Die Mongo-Livedata sind ein guter Ausgangspunkt für ein solches Projekt." - docs.meteor.com
LeeGee
Meteor wurde mit Node.js geschrieben, daher fürchte ich, dass diese Antwort nichts Neues hinzufügt oder Dinge ändert. Sie haben nur ein Framework, das Client und Server abdeckt.
Caltor
4

Abhängig von Ihrer Umgebung können Sie Rhino verwenden, um dies zu tun. Weitere Informationen finden Sie auf der Rhino-Website . Auf diese Weise können Sie über JavaScript auf alle Java-Bibliotheken zugreifen.

Kusmeroglu
quelle
4

Ja. Es gibt ein HTTP-Plugin für MySQL.

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

Ich google jetzt nur darüber, was mich zu dieser Frage zum Stapelüberlauf führte. Sie sollten in der Lage sein, eine MySQL-Datenbank jetzt oder in naher Zukunft zu AJAXEN (sie behaupten, sie sei nicht produktionsbereit).

Nick Manning
quelle
2

Normalerweise benötigen Sie eine serverseitige Skriptsprache wie PHP, um eine Verbindung zu MySQL herzustellen. Wenn Sie jedoch nur ein schnelles Modell erstellen, können Sie http://www.mysqljs.com verwenden , um eine Verbindung zu MySQL über Javascript mithilfe von Code as herzustellen folgt:

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

Es muss erwähnt werden, dass dies keine sichere Methode für den Zugriff auf MySql ist und nur für private Demos oder Szenarien geeignet ist, in denen Endbenutzer nicht auf den Quellcode zugreifen können, z. B. in Phonegap iOS-Apps.

Fiach Reid
quelle
Nach einer kurzen Überprüfung stellt dies eine Bedrohung für den Diebstahl von Datenbankanmeldeinformationen dar, wie in Zeile 6 des Skripts zu sehen istvar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas
@Dragas - Das stimmt. Javascript hat keine native Möglichkeit, eine Verbindung zu einer MySQL-Datenbank herzustellen. Daher wird die MySQL-DLL serverseitig gehostet, daher der AJAX-Aufruf. Es bedeutet auch, dass Sie, wenn Sie eine Firewall auf Port 3306 verwenden, diese für eingehende Verbindungen von mysqljs.com
Fiach Reid
1

Sie können AJAX-Anforderungen an einige serverseitige RESTful-Wrapper für MySQL senden, z. B. DBSlayer , PhpRestSQL oder AlsoSQL (für Drizzle , eine Abzweigung von MySQL).

Niutech
quelle
1

Ja, du kannst. MySQL-Konnektoren verwenden TCP für die Verbindung, und in JS gibt es eine etwas modifizierte Version des TCP-Clients namens Websocket. Sie können jedoch keine direkte Verbindung zum MySQL-Server mit dem Websocket herstellen. Sie benötigen eine Brücke eines Drittanbieters zwischen Websocket und MySQL. Es empfängt eine Anfrage vom Websocket, sendet sie an MySQL, antwortet auf das Ergebnis und sendet sie erneut an JS.

Und dies ist meine Beispielbrücke, die in C # mit einer websockelscharfen Bibliothek geschrieben wurde:

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

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

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

ws.send("select * from users");
Brainstorming
quelle
0

Nein.

Sie müssen einen Wrapper in PHP schreiben und dann die zurückgegebenen Daten exportieren (wahrscheinlich als Json). Holen Sie sich NIEMALS von Ihrem "_GET" den SQL-Code, da dies als SQL-Injection bezeichnet wird (Personen, die dies lernen, haben die volle Kontrolle über Ihre Datenbank).

Dies ist ein Beispiel, das ich geschrieben habe:

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

Erfahren Sie bitte mehr über SQL-Injektionen.

elcuco
quelle
0

Sie können über Javascript über ein JAVA-Applet eine Verbindung zu MySQL herstellen. Das JAVA-Applet würde den JDBC-Treiber für MySQL einbetten, mit dem Sie eine Verbindung zu MySQL herstellen können.

Denken Sie daran, dass Sie Benutzer auffordern müssen, dem Applet erweiterte Berechtigungen zu erteilen, wenn Sie eine Verbindung zu einem Remote-MySQL-Server herstellen möchten (außer dem, von dem Sie das Applet heruntergeladen haben). Standardmäßig kann das Applet nur eine Verbindung zu dem Server herstellen, von dem es heruntergeladen wurde.

Rajiv
quelle
0

Wenn Sie nicht an MySQL gebunden sind, können Sie zu PostgreSQL wechseln. Es unterstützt JavaScript-Prozeduren (PL / V8) in der Datenbank. Es ist sehr schnell und kraftvoll. Kasse diesen Beitrag .

Ramigg
quelle
0

JavaScript kann keine direkte Verbindung zur Datenbank herstellen, um die erforderlichen Daten abzurufen. Sie können jedoch AJAX verwenden. Um die AJAX-Anforderung an den Server zu vereinfachen, können Sie das jQuery JS-Framework http://jquery.com verwenden . Hier ist ein kleines Beispiel

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
quelle
1
Wo ist die MySQL-Abfrage in diesem Beispiel?
Michael
@ Michael: Gute Frage.
Connor Gurney
-1

Ich habe Ihre Frage verstanden. Ich denke, Sie verwechseln sie mit Sprachen wie dot.net und java, in denen Sie die DB-Verbindung in Ihrem Code öffnen können. Nein, JavaScript kann keine direkte Verbindung zu MySQL herstellen, da JavaScript eine clientseitige Skriptsprache ist (Ausnahme Node.js). Für den Zugriff auf Daten benötigen Sie eine mittlere Ebene wie die RESTful-API.

Schütze
quelle
-3

Sie können eine MySQL-Verbindung mithilfe einer PHP-Datei hinzufügen. Unten ist das Beispiel einer PHP-Datei.

<?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
quelle
Eigentlich ist es keine Antwort. Die Frage war Can JavaScript connect with MySQL?.
Alex.K.
Dies ist null Prozent relevant für die gestellte Frage. Der Autor der Frage war sehr spezifisch in Bezug auf Javascript.
Geekgugi