Czy JavaScript może łączyć się z MySQL?

113

Czy JavaScript może łączyć się z MySQL? Jeśli tak to jak?

Anonimowy Wielki
źródło
nie, chyba że nie mówisz o JavaScript w przeglądarce.
Luca Matteis
2
A co z JavaScriptem po stronie serwera (np. Poprzez Rhino)? czy możemy połączyć się z bazą danych?
Joand
7
Lub Node.js też będzie działać
Gabriel Fair
1
Zignoruj ​​wszystkie odpowiedzi na tej stronie, ponieważ wszystkie są błędne. W rzeczywistości można to zrobić. Zobacz developer.chrome.com/apps/app_network
Pacerier
Przyjęta odpowiedź jest po prostu błędna (i była też w 2010 roku). Ta odpowiedź jest poprawna.
TJ Crowder

Odpowiedzi:

26

Nie, JavaScript nie może bezpośrednio połączyć się z MySQL. Ale możesz mieszać JS z PHP, aby to zrobić.

JavaScript jest językiem po stronie klienta, a Twoja baza danych MySQL będzie działać na serwerze

konradowy
źródło
87
mała uwaga: fakt, że JavaScript działa po stronie klienta nie ma NIC wspólnego z faktem, że nie może połączyć się z serwerem bazy danych. Może być bardzo dobrze (choć mało prawdopodobne), że przyszła wersja języka doda interfejsy API w celu uzyskania dostępu do zdalnych baz danych.
Lucas Pottersky
3
Nie nazwałbym tego jednak „mieszaniem JS z PHP”. Możesz pozwolić kodowi PHP wygenerować kod / dane JavaScript (np. Json), które wcześniej pobrał z MySQL. Lub możesz użyć PHP na serwerze, aby zapewnić interfejs http (json / REST / SOAP / ... cokolwiek) w celu uzyskania dostępu do danych, które kod php pobiera z MySQL - a ten interfejs http można wywołać za pomocą kodu JavaScript działającego w dowolnym miejscu, głównie brwoser. Na dzień dzisiejszy stwierdzenie, że JavaScript jest po stronie klienta, nie jest już aktualne - sprawdź na przykład Node.js.
Henning
14
„JavaScript jest językiem po stronie klienta” Niekoniecznie: nie bardziej niż Java.
LeeGee
2
z nową wersją mysql 5.7 httpclient może komunikować się bezpośrednio z bazą danych mysql za pomocą wtyczki http (zbudowanej dla mysql 5.7)
Atul Chaudhary
Czy nie byłoby w jakiś sposób zagrożeniem bezpieczeństwa dla wszystkich przeglądarek uzyskujących dostęp do Twojej witryny, gdyby lokalnie posiadały plik javascript, który bezpośrednio uzyskuje dostęp do serwera MySQL?
Vassilis,
85

JavaScript po stronie klienta nie może uzyskać dostępu do MySQL bez jakiegoś mostu. Ale powyższe pogrubione stwierdzenia, że ​​JavaScript jest językiem po stronie klienta, są nieprawidłowe - JavaScript może działać po stronie klienta i po stronie serwera, tak jak w przypadku Node.js.

Node.js może uzyskać dostęp do MySQL przez coś takiego jak https://github.com/sidorares/node-mysql2

Możesz także stworzyć coś przy użyciu Socket.IO

Czy chodziło Ci o pytanie, czy aplikacja JS po stronie klienta może uzyskać dostęp do MySQL? Nie jestem pewien, czy takie biblioteki istnieją, ale są możliwe.

EDYCJA : Od momentu napisania mamy teraz klaster MySQL :

Sterownik MySQL Cluster JavaScript dla Node.js jest dokładnie tym, na co wygląda - jest to łącznik, który można wywołać bezpośrednio z kodu JavaScript w celu odczytu i zapisu danych. Ponieważ uzyskuje bezpośredni dostęp do węzłów danych, nie ma dodatkowych opóźnień związanych z przejściem przez serwer MySQL i konieczność konwersji z obiektów kodu JavaScript // do operacji SQL. Jeśli z jakiegoś powodu wolisz, aby przechodził przez serwer MySQL (na przykład, jeśli przechowujesz tabele w InnoDB), możesz to skonfigurować.

LeeGee
źródło
53

Jeśli chcesz połączyć się z bazą danych MySQL za pomocą JavaScript, możesz użyć Node.js i biblioteki o nazwie mysql . Możesz tworzyć zapytania i uzyskiwać wyniki jako tablicę rejestrów. Jeśli chcesz to wypróbować, możesz użyć mojego generatora projektów do utworzenia zaplecza i wybrać MySQL jako bazę danych do połączenia. Następnie po prostu wyeksponuj swój nowy interfejs API REST lub punkt końcowy GraphQL przed sobą i zacznij pracować z bazą danych MySQL.


STARA ODPOWIEDŹ POZOSTAŁA NOSTALGIA

NASTĘPNIE

Jak rozumiem pytanie i poprawiam mnie, jeśli się mylę, odnosi się do klasycznego modelu serwera z JavaScriptem tylko po stronie klienta. W tym klasycznym modelu z serwerami LAMP (Linux, Apache, MySQL, PHP) językiem w kontakcie z bazą był PHP, więc aby zażądać danych do bazy trzeba napisać skrypty PHP i powtórzyć zwracane dane do klienta. Zasadniczo rozkład języków według fizycznych maszyn był następujący:

  1. Strona serwera: PHP i MySQL.
  2. Strona klienta: HTML / CSS i JavaScript.

Odpowiadało to na model MVC (Model, Widok, Kontroler), w którym mieliśmy następującą funkcjonalność:

  1. MODEL: Model jest tym, co zajmuje się danymi, w tym przypadku skryptami PHP, które zarządzają zmiennymi lub które uzyskują dostęp do danych przechowywanych, w tym przypadku w naszej bazie danych MySQL i wysyłają je jako dane JSON do klienta.
  2. WIDOK: Widok jest tym, co widzimy i powinien być całkowicie niezależny od modelu. Musi tylko pokazać dane zawarte w modelu, ale nie powinien zawierać odpowiednich danych. W tym przypadku widok używa HTML i CSS. HTML, aby stworzyć podstawową strukturę widoku i CSS, aby nadać kształt tej podstawowej strukturze.
  3. KONTROLER: Kontroler jest interfejsem między naszym modelem a naszym widokiem. W tym przypadku używanym językiem jest JavaScript i pobiera dane, które model przesyła nam jako pakiet JSON i umieszcza je w kontenerach oferujących strukturę HTML. Sposób interakcji kontrolera z modelem polega na użyciu technologii AJAX . Używamy metod GET i POST do wywoływania skryptów PHP po stronie serwera i przechwytywania zwróconych danych z serwera.

Jeśli chodzi o kontroler, mamy naprawdę interesujące narzędzia, takie jak jQuery , jako biblioteka „niskiego poziomu” do kontrolowania struktury HTML (DOM), a następnie nowe, bardziej wysokopoziomowe, jak Knockout.js, które pozwalają nam tworzyć obserwatory łączące różne Elementy DOM aktualizujące je, gdy wystąpią zdarzenia. Jest też Angular.js od Google, który działa w podobny sposób, ale wydaje się być kompletnym środowiskiem. Aby pomóc Ci wybrać jedną z nich, mamy tutaj dwie doskonałe analizy dwóch narzędzi: Knockout vs. Angular.js i Knockout.js vs. Angular.js . Nadal czytam. Mam nadzieję, że ci pomogą.

TERAZ

W nowoczesnych serwerach opartych na Node.js używamy JavaScript do wszystkiego. Node.js to środowisko JavaScript z wieloma bibliotekami, które współpracują z Google V8, silnikiem JavaScript Chrome. Sposób, w jaki pracujemy z tymi nowymi serwerami, to:

  1. Node.js i Express : mainframe, na którym zbudowany jest serwer. Możemy stworzyć serwer z kilkoma wierszami kodu lub nawet skorzystać z bibliotek takich jak Express, aby jeszcze bardziej ułatwić tworzenie serwera. Za pomocą Node.js i Express będziemy zarządzać petycjami do serwera od klientów i odpowiadać na nie odpowiednimi stronami.
  2. Jade : Do tworzenia stron używamy języka szablonów, w tym przypadku Jade, który pozwala nam pisać strony internetowe tak, jak pisaliśmy HTML, ale z różnicami (zajmuje to trochę czasu, ale jest łatwy do nauczenia). Następnie w kodzie serwera, aby odpowiadać na petycje klienta, wystarczy wyrenderować kod Jade na „prawdziwy” kod HTML.
  3. Rysik : podobny do Jade, ale do CSS. W tym przypadku używamy funkcji oprogramowania pośredniego, aby przekonwertować plik rysika na prawdziwy plik CSS dla naszej strony.

Następnie mamy wiele pakietów, które możemy zainstalować za pomocą NPM (menedżera pakietów Node.js) i używać ich bezpośrednio na naszym serwerze Node.js, po prostu tego wymagając (dla tych z Was, którzy chcą się uczyć Node.js, wypróbuj ten samouczek dla początkujących dla przeglądu). Wśród tych pakietów masz dostęp do niektórych baz danych. Korzystając z tego, możesz użyć JavaScript po stronie serwera, aby uzyskać dostęp do baz danych My SQL.

Ale najlepsze, co możesz zrobić, jeśli zamierzasz pracować z Node.js, to użyć nowych baz danych NoSQL, takich jak MongoDB , opartych na plikach JSON. Zamiast przechowywać tabele, takie jak MySQL, przechowuje dane w strukturach JSON, dzięki czemu możesz umieścić różne dane w każdej strukturze, takie jak długie wektory numeryczne, zamiast tworzyć ogromne tabele dla rozmiaru największej.

Mam nadzieję, że to krótkie wyjaśnienie stanie się dla Ciebie przydatne, a jeśli chcesz dowiedzieć się więcej na ten temat, oto kilka zasobów, z których możesz skorzystać:

  • Egghead : Ta strona jest pełna świetnych krótkich samouczków na temat JavaScript i jego środowiska. Warto spróbować. I od czasu do czasu rób rabaty.
  • Szkoła kodowania : bezpłatny i bardzo interesujący kurs na temat narzędzi programistycznych Chrome, który pomoże Ci przetestować stronę klienta.
  • Codecademy : Darmowe kursy o HTML, CSS, JavaScript, jQuery i PHP, które możesz śledzić z przykładami online.
  • Edukacja 10gen : Zawiera wszystko, co musisz wiedzieć o MongoDB w samouczkach dla różnych języków.
  • W3Schools : Ta szkoła ma tutoriale na ten temat i możesz jej użyć jako miejsca odniesienia, ponieważ zawiera wiele przykładów przydatnych skrótów.
  • Udacity : miejsce z darmowymi kursami wideo na różne tematy, z kilkoma interesującymi na temat tworzenia stron internetowych i moim ulubionym, niesamowitym kursem WebGL dla grafiki 3D z JavaScript.

Mam nadzieję, że pomoże ci to zacząć.

Baw się dobrze!

Timbergus
źródło
Ładna, szczegółowa odpowiedź wyjaśniająca mechanikę.
Duane
Dzięki :) Właśnie dodałem aktualizację na końcu odpowiedzi, aby rozwiązać problem. Możesz użyć serwera węzłowego z biblioteką o nazwie „mysql”, a ja dodałem łącze do utworzonego przeze mnie generatora API, którego możesz użyć do rozpoczęcia nowego projektu API. Mam nadzieję, że to pomoże.
Timbergus
Re „then”: JavaScript używany po stronie serwera sięga 1995 roku, kiedy został dołączony do Netscape Enterprise Server. Wkrótce potem Microsoft umieścił „JScript” na swoim serwerze IIS. JavaScript na serwerze nie jest zdalnie nowy.
TJ Crowder,
Myślę, że byłoby dobrze, gdyby ta odpowiedź miała najnowsze informacje na górze lub po prostu usunęła stare, nieaktualne informacje. Jest też trochę rozwlekły i koncentruje się na określonych językach. Krótka odpowiedź jest taka, że ​​JavaScript może być używany do łączenia się z bazą danych MySQL bezpośrednio z Node.JS (lub innego środowiska wykonawczego po stronie serwera), ale nie z przeglądarki ze względu na celowe bezpieczeństwo przeglądarki.
Caltor
8

Myślę, że musiałbyś dodać coś takiego jak PHP do równania. PHP do interakcji z bazą danych, a następnie możesz wykonywać wywołania AJAX za pomocą JavaScript.

Kerry
źródło
8

Trochę późno, ale niedawno dowiedziałem się, że MySql 5.7 ma wtyczkę http, dzięki której użytkownik może teraz bezpośrednio połączyć się z mysql.

Poszukaj klienta HTTP dla mysql 5.7

Atul Chaudhary
źródło
7

Prosta odpowiedź brzmi: nie.

JavaScript to język po stronie klienta, który działa w przeglądarce ( niezależnie od node.js ), a MySQL to technologia po stronie serwera, która działa na serwerze.

Oznacza to, że do łączenia się z bazą danych zazwyczaj używasz języka po stronie serwera, takiego jak ASP.NET lub PHP.

Dean Harding
źródło
Javascript (w formie przeglądarki po stronie klienta) jest używany codziennie do łączenia się z technologiami po stronie serwera (Apache, Nginx, PHP, NodeJS itp.) Działającymi na serwerze. Sama definicja serwera / klienta wymaga, aby „podział” między nimi był możliwy do przezwyciężenia.
jeteon,
6

TAK? Spójrz na meteor. Spinki do mankietów:

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

Nie rozumiem, jak to się robi. Ale Nettuts + umieścił to w sekcji javascript-ajax, może dzieje się magia.

Pokazuje również sposób łączenia i wstawiania do MongoDB za pomocą JS, na przykład:

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
źródło
1
„Możesz zastąpić inną bazę danych MongoDB, dostarczając sterownik bazy danych po stronie serwera i / lub pamięć podręczną po stronie klienta, która implementuje alternatywny interfejs API. Mongo-Liveata jest dobrym punktem wyjścia dla takiego projektu”. - docs.meteor.com
LeeGee
Meteor został napisany przy użyciu Node.js, więc obawiam się, że ta odpowiedź nie dodaje niczego nowego ani nie zmienia rzeczy. Masz tylko strukturę obejmującą klienta i serwer.
Caltor
4

W zależności od środowiska możesz do tego użyć Rhino, zobacz witrynę Rhino . Daje to dostęp do wszystkich bibliotek Java z poziomu JavaScript.

Kusmeroglu
źródło
4

Tak. Istnieje wtyczka HTTP dla MySQL.

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

Po prostu google teraz o tym, co doprowadziło mnie do pytania o przepełnienie stosu. Powinieneś być w stanie AJAX bazy danych MySQL teraz lub w najbliższej przyszłości (twierdzą, że nie jest gotowa do produkcji).

Nick Manning
źródło
2

Zwykle potrzebujesz języka skryptowego po stronie serwera, takiego jak PHP, aby połączyć się z MySQL, jednak jeśli robisz tylko szybką makietę, możesz użyć http://www.mysqljs.com, aby połączyć się z MySQL z JavaScript, używając kodu jak następuje:

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

Należy wspomnieć, że nie jest to bezpieczny sposób uzyskiwania dostępu do MySql i nadaje się tylko do prywatnych prezentacji lub scenariuszy, w których użytkownicy końcowi nie mają dostępu do kodu źródłowego, na przykład w aplikacjach Phonegap iOS.

Fiach Reid
źródło
Po szybkiej inspekcji to stwarza zagrożenie dla kradzież danych uwierzytelniających bazy danych, jak widać po linii 6 na tym skrypcie który stwierdzavar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas
@Dragas - Zgadza się. javascript nie ma natywnego sposobu łączenia się z bazą danych mysql, dlatego biblioteka dll mysql jest hostowana po stronie serwera, stąd wywołanie AJAX. Oznacza to również, że jeśli używasz zapory ogniowej na porcie 3306, musisz otworzyć to dla połączeń przychodzących z mysqljs.com
Reid
1

Tak, możesz. Konektory MySQL używają TCP do połączenia, aw JS jest trochę zmodyfikowana wersja klienta TCP o nazwie Websocket. Ale nie możesz bezpośrednio połączyć się z serwerem MySQL przez websocket. Będziesz potrzebował mostu innej firmy między websocket i mysql. Otrzymuje zapytanie z websocket, wysyła je do mysql, wynik odpowiedzi i ponownie wysyła do JS.

A to jest mój przykładowy most napisany w C # z biblioteką 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();
    }
}

Strona JS:

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

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

ws.send("select * from users");
Burza mózgów
źródło
0

Nie.

Musisz napisać wrapper w PHP, a następnie wyeksportować zwrócone dane (prawdopodobnie jako Json). NIGDY nie pobieraj kodu SQL ze swojego „_GET”, ponieważ nazywa się to wstrzyknięciem SQL (osoby, które się tego dowiedzą, będą miały pełną kontrolę nad Twoją bazą danych).

Oto przykład, który napisałem:

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

Dowiedz się więcej o zastrzykach SQL.

elcuco
źródło
0

Możesz połączyć się z MySQL z poziomu JavaScript poprzez aplet JAVA. Aplet JAVA osadziłby sterownik JDBC dla MySQL, który pozwoli ci połączyć się z MySQL.

Pamiętaj, że jeśli chcesz połączyć się ze zdalnym serwerem MySQL (innym niż ten, z którego pobrałeś aplet), będziesz musiał poprosić użytkowników o przyznanie rozszerzonych uprawnień do apletu. Domyślnie aplet może łączyć się tylko z serwerem, z którego został pobrany.

Rajiv
źródło
0

Jeśli nie jesteś zablokowany na MySQL, możesz przełączyć się na PostgreSQL. Obsługuje procedury JavaScript (PL / V8) wewnątrz bazy danych. Jest bardzo szybki i potężny. Sprawdź ten post .

ramigg
źródło
0

JavaScript nie może łączyć się bezpośrednio z DB, aby uzyskać potrzebne dane, ale możesz użyć AJAX. Aby ułatwić wysyłanie żądań AJAX do serwera, możesz użyć frameworka jQuery JS http://jquery.com . Oto mały przykład

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);
Wiceprezes
źródło
1
gdzie w tym przykładzie jest zapytanie MySQL?
Michael,
@Michael: Świetne pytanie.
Connor Gurney
-1

Zrozumiałem twoje pytanie, myślę, że mylisz je z językami takimi jak dot.net i java, w których możesz otworzyć połączenie DB w swoim kodzie. Nie, JavaScript nie może bezpośrednio łączyć się z MySQL, ponieważ JavaScript jest językiem skryptowym po stronie klienta (wyjątek Node.js). Aby uzyskać dostęp do danych, potrzebujesz warstwy pośredniej, takiej jak RESTful API.

Strzelec
źródło
-3

Możesz dodać połączenie mysql za pomocą pliku PHP. Poniżej przykład pliku 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
źródło
Właściwie to nie jest odpowiedź. Pytanie brzmiało Can JavaScript connect with MySQL?.
Alex.K.
To zero procent adekwatności do zadanego pytania. Autor pytania był bardzo konkretny na temat Javascript.
geekgugi