Bisakah JavaScript terhubung dengan MySQL?

113

Bisakah JavaScript terhubung dengan MySQL? Jika ya, bagaimana caranya?

Anonim yang Agung
sumber
tidak, kecuali Anda tidak sedang membicarakan tentang JavaScript di browser.
Luca Matteis
2
Bagaimana dengan JavaScript sisi server (misalnya melalui Rhino)? dapatkah kita terhubung ke database?
Joand
7
Atau Node.js juga akan berfungsi
Gabriel Fair
1
Abaikan semua jawaban di halaman ini karena semuanya salah. Nyatanya, itu bisa dilakukan. Lihat developer.chrome.com/apps/app_network
Pacerier
Jawaban yang diterima jelas salah (dan pada tahun 2010 juga). Jawaban ini benar.
TJ Crowder

Jawaban:

26

Tidak, JavaScript tidak dapat langsung terhubung ke MySQL. Tapi Anda bisa mencampur JS dengan PHP untuk melakukannya.

JavaScript adalah bahasa sisi klien dan database MySQL Anda akan berjalan di server

konradowy
sumber
87
catatan kecil: fakta bahwa JavaScript berjalan di sisi klien TIDAK ADA hubungannya dengan fakta bahwa JavaScript tidak dapat terhubung ke Server Database. Mungkin sangat baik (meskipun, sangat tidak mungkin) bahwa versi bahasa yang akan datang akan menambahkan API untuk mengakses database jarak jauh.
Lucas Pottersky
3
Saya tidak akan menyebutnya "campuran JS dengan PHP", meskipun. Apa yang mungkin Anda lakukan adalah membiarkan Kode PHP menghasilkan Kode / Data JavaScript (json, misalnya) yang telah diambil dari MySQL sebelumnya. Atau Anda mungkin menggunakan PHP di server untuk menyediakan antarmuka http (json / REST / SOAP / ... apa saja) untuk mengakses data yang diambil kode php dari MySQL - dan antarmuka http ini dapat dipanggil dengan kode JavaScript yang berjalan di mana saja, terutama seorang brwoser. Mulai hari ini, juga mengatakan JavaScript adalah sisi klien tidak lagi terkini - periksa Node.js misalnya.
Henning
14
"JavaScript adalah bahasa sisi klien" Belum tentu: tidak lebih dari Java.
LeeGee
2
dengan versi baru mysql 5.7 httpclient dapat berkomunikasi langsung dengan database mysql menggunakan plugin http (dibangun untuk mysql 5.7)
Atul Chaudhary
Bukankah akan menjadi risiko keamanan bagi semua browser yang mengakses situs Anda untuk memiliki file javascript yang secara langsung mengakses server MySQL Anda?
Vassilis
85

JavaScript sisi klien tidak dapat mengakses MySQL tanpa semacam jembatan. Tetapi pernyataan tebal di atas bahwa JavaScript hanyalah bahasa sisi klien salah - JavaScript dapat menjalankan sisi klien dan sisi server, seperti pada Node.js.

Node.js dapat mengakses MySQL melalui sesuatu seperti https://github.com/sidorares/node-mysql2

Anda juga dapat mengembangkan sesuatu menggunakan Socket.IO

Apakah Anda bermaksud bertanya apakah aplikasi JS sisi klien dapat mengakses MySQL? Saya tidak yakin apakah perpustakaan seperti itu ada, tetapi itu mungkin.

EDIT : Sejak menulis, kami sekarang memiliki MySQL Cluster :

Driver JavaScript Cluster MySQL untuk Node.js persis seperti namanya - ini adalah konektor yang dapat dipanggil langsung dari kode JavaScript Anda untuk membaca dan menulis data Anda. Karena mengakses node data secara langsung, tidak ada latensi tambahan saat melewati Server MySQL dan perlu mengonversi objek // kode JavaScript ke dalam operasi SQL. Jika karena alasan tertentu, Anda lebih suka melewati Server MySQL (misalnya jika Anda menyimpan tabel di InnoDB) maka itu dapat dikonfigurasi.

LeeGee
sumber
53

Jika Anda ingin terhubung ke database MySQL menggunakan JavaScript, Anda dapat menggunakan Node.js dan pustaka bernama mysql . Anda dapat membuat kueri, dan mendapatkan hasil sebagai array register. Jika Anda ingin mencobanya, Anda dapat menggunakan generator proyek saya untuk membuat backend dan memilih MySQL sebagai database untuk dihubungkan. Kemudian, cukup paparkan REST API atau titik akhir GraphQL baru Anda ke depan Anda dan mulai bekerja dengan database MySQL Anda.


JAWABAN LAMA KIRI OLEH NOSTALGIA

KEMUDIAN

Saat saya memahami pertanyaannya dan mengoreksi saya jika saya salah, ini mengacu pada model server klasik dengan JavaScript hanya di sisi klien. Dalam model klasik ini, dengan server LAMP (Linux, Apache, MySQL, PHP), bahasa yang berhubungan dengan database adalah PHP, jadi untuk meminta data ke database Anda perlu menulis skrip PHP dan menggemakan data yang dikembalikan ke klien. Pada dasarnya, distribusi bahasa menurut mesin fisik adalah:

  1. Sisi server: PHP dan MySQL.
  2. Sisi Klien: HTML / CSS dan JavaScript.

Ini menjawab model MVC (Model, View, Controller) di mana kami memiliki fungsi berikut:

  1. MODEL: Model adalah apa yang berhubungan dengan data, dalam hal ini skrip PHP yang mengelola variabel atau yang mengakses data yang disimpan, dalam hal ini di database MySQL kita dan mengirimkannya sebagai data JSON ke klien.
  2. TAMPILAN: Tampilan adalah apa yang kita lihat dan harus benar-benar terlepas dari model. Ini hanya perlu menampilkan data yang terdapat dalam model, tetapi seharusnya tidak memiliki data yang relevan di dalamnya. Dalam hal ini, tampilan menggunakan HTML dan CSS. HTML untuk membuat struktur dasar tampilan, dan CSS untuk memberikan bentuk pada struktur dasar ini.
  3. CONTROLLER: Pengontrol adalah antarmuka antara model dan tampilan kita. Dalam hal ini, bahasa yang digunakan adalah JavaScript dan mengambil data yang dikirimkan model kepada kami sebagai paket JSON dan meletakkannya di dalam wadah yang menawarkan struktur HTML. Cara pengontrol berinteraksi dengan model adalah dengan menggunakan AJAX . Kami menggunakan metode GET dan POST untuk memanggil skrip PHP di sisi server dan untuk menangkap data yang dikembalikan dari server.

Untuk pengontrol, kami memiliki alat yang sangat menarik seperti jQuery , sebagai pustaka "tingkat rendah" untuk mengontrol struktur HTML (DOM), dan kemudian yang baru, tingkat yang lebih tinggi sebagai Knockout.js yang memungkinkan kita membuat pengamat yang menghubungkan berbeda Elemen DOM memperbaruinya saat peristiwa terjadi. Ada juga Angular.js dari Google yang bekerja dengan cara yang sama, tetapi tampaknya merupakan lingkungan yang lengkap. Untuk membantu Anda memilih di antara mereka, di sini Anda memiliki dua analisis yang sangat baik dari dua alat: Knockout vs. Angular.js dan Knockout.js vs. Angular.js . Saya masih membaca Semoga mereka membantu Anda.

SEKARANG

Di server modern yang berbasis di Node.js, kami menggunakan JavaScript untuk semuanya. Node.js adalah lingkungan JavaScript dengan banyak pustaka yang bekerja dengan Google V8, mesin JavaScript Chrome. Cara kami bekerja dengan server baru ini adalah:

  1. Node.js dan Express : Mainframe tempat server dibuat. Kita dapat membuat server dengan beberapa baris kode atau bahkan menggunakan pustaka seperti Express untuk membuat server lebih mudah. Dengan Node.js dan Express, kami akan mengelola petisi ke server dari klien dan akan menjawabnya dengan halaman yang sesuai.
  2. Jade : Untuk membuat halaman kami menggunakan bahasa templating, dalam hal ini Jade, yang memungkinkan kami untuk menulis halaman web seperti saat kami menulis HTML tetapi dengan perbedaan (perlu sedikit waktu tetapi mudah dipelajari). Kemudian, di kode server untuk menjawab petisi klien, kita hanya perlu merender kode Jade menjadi kode HTML "asli".
  3. Stylus : Mirip dengan Jade tetapi untuk CSS. Dalam hal ini, kami menggunakan fungsi middleware untuk mengubah file stylus menjadi file CSS yang sebenarnya untuk halaman kami.

Kemudian kami memiliki banyak paket yang dapat kami instal menggunakan NPM (manajer paket Node.js) dan menggunakannya langsung di server Node.js kami hanya membutuhkannya (bagi Anda yang ingin belajar Node.js, coba tutorial pemula ini untuk gambaran umum). Dan di antara paket-paket ini, Anda memiliki beberapa di antaranya untuk mengakses database. Dengan menggunakan ini, Anda dapat menggunakan JavaScript di sisi server untuk mengakses database My SQL.

Tetapi hal terbaik yang dapat Anda lakukan jika Anda akan bekerja dengan Node.js adalah menggunakan database NoSQL baru seperti MongoDB , berdasarkan file JSON. Alih-alih menyimpan tabel seperti MySQL, ia menyimpan data dalam struktur JSON, sehingga Anda dapat meletakkan data yang berbeda di dalam setiap struktur seperti vektor numerik panjang daripada membuat tabel besar untuk ukuran yang terbesar.

Saya harap penjelasan singkat ini bermanfaat bagi Anda, dan jika Anda ingin mempelajari lebih lanjut tentang ini, berikut Anda memiliki beberapa sumber daya yang dapat Anda gunakan:

  • Egghead : Situs ini penuh dengan tutorial singkat yang bagus tentang JavaScript dan lingkungannya. Ini patut dicoba. Dan membuat diskon dari waktu ke waktu.
  • Sekolah Kode : Dengan kursus gratis dan sangat menarik tentang alat Pengembang Chrome untuk membantu Anda menguji sisi klien.
  • Codecademy : Dengan kursus gratis tentang HTML, CSS, JavaScript, jQuery, dan PHP yang dapat Anda ikuti dengan contoh online.
  • Pendidikan 10gen : Dengan semua yang perlu Anda ketahui tentang MongoDB dalam tutorial untuk berbagai bahasa.
  • W3Schools : Yang satu ini memiliki tutorial tentang semua ini dan Anda dapat menggunakannya sebagai tempat referensi karena memiliki banyak contoh kode pendek yang sangat berguna.
  • Udacity : Tempat dengan kursus video gratis tentang berbagai subjek dengan beberapa yang menarik tentang pengembangan web dan pilihan saya, kursus WebGL yang luar biasa untuk grafik 3D dengan JavaScript.

Saya harap ini membantu Anda untuk memulai.

Selamat bersenang-senang!

Timbergus
sumber
Jawaban rinci yang bagus menjelaskan mekanika.
Duane
Terima kasih :) Saya baru saja menambahkan pembaruan di akhir jawaban untuk menyelesaikan masalah. Anda dapat menggunakan server node dengan pustaka yang disebut "mysql", dan saya telah menambahkan tautan ke generator API yang telah saya buat yang dapat Anda gunakan untuk memulai proyek API baru. Semoga membantu.
Timbergus
Re "kemudian": JavaScript menggunakan sisi server kembali ke tahun 1995, ketika itu disertakan dalam Netscape Enterprise Server. Microsoft segera meletakkan "JScript" di server IIS-nya. JavaScript di server bukanlah hal baru.
TJ Crowder
Saya pikir akan lebih baik jika jawaban ini memiliki info terbaru di bagian atas atau hanya menghapus info lama yang sudah usang. Ini juga sedikit bertele-tele dan berfokus pada bahasa tertentu. Jawaban singkatnya adalah bahwa JavaScript dapat digunakan untuk terhubung ke database MySQL langsung dari Node.JS (atau lingkungan runtime sisi server lainnya) tetapi tidak dari browser karena keamanan browser yang disengaja.
Caltor
8

Saya pikir Anda perlu menambahkan sesuatu seperti PHP ke dalam persamaan. PHP untuk berinteraksi dengan database dan kemudian Anda dapat membuat panggilan AJAX dengan Javascript.

Kerry
sumber
8

Agak terlambat tetapi baru-baru ini saya menemukan bahwa MySql 5.7 mendapat plugin http melalui pengguna yang dapat langsung terhubung ke mysql sekarang.

Cari Klien Http untuk mysql 5.7

Atul Chaudhary
sumber
7

Jawaban sederhananya adalah: tidak.

JavaScript adalah bahasa sisi klien yang berjalan di browser ( meskipun node.js ) dan MySQL adalah teknologi sisi server yang berjalan di server.

Itu berarti Anda biasanya menggunakan bahasa sisi server seperti ASP.NET atau PHP untuk menyambung ke database.

Dean Harding
sumber
Javascript (di sisi klien, bentuk browser) digunakan setiap hari untuk terhubung dengan teknologi sisi server (Apache, Nginx, PHP, NodeJS, dll) yang berjalan di server. Definisi server / klien sendiri mensyaratkan bahwa "pembagian" di antara mereka dapat diatasi.
jeteon
6

IYA? Coba lihat meteor. Tautan:

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

Saya tidak mengerti bagaimana itu dilakukan. Tetapi Nettuts + meletakkan hal ini di bagian javascript-ajax, mungkin keajaiban terjadi.

Ini juga menunjukkan beberapa cara untuk menghubungkan dan menyisipkan ke MongoDB dengan JS, seperti ini:

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
sumber
1
"Anda dapat mengganti database lain untuk MongoDB dengan menyediakan driver database sisi server dan / atau cache sisi klien yang mengimplementasikan API alternatif. Mongo-Liveata adalah titik awal yang baik untuk proyek semacam itu." - docs.meteor.com
LeeGee
Meteor ditulis menggunakan Node.js jadi saya khawatir jawaban ini tidak menambahkan sesuatu yang baru atau mengubah banyak hal. Anda hanya memiliki kerangka kerja yang mencakup klien dan server.
Caltor
4

Bergantung pada lingkungan Anda, Anda dapat menggunakan Rhino untuk melakukan ini, lihat situs web Rhino . Ini memberi Anda akses ke semua pustaka Java dari dalam JavaScript.

Kusmeroglu
sumber
4

Iya. Ada plugin HTTP untuk MySQL.

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

Saya baru saja mencari di Google tentang hal itu sekarang, yang membawa saya ke pertanyaan stackoverflow ini. Anda harus dapat membuat AJAX database MySQL sekarang atau dalam waktu dekat (mereka mengklaim itu belum siap untuk produksi).

Nick Manning
sumber
2

Biasanya, Anda memerlukan bahasa skrip sisi server seperti PHP untuk terhubung ke MySQL, namun, jika Anda hanya melakukan mockup cepat, Anda dapat menggunakan http://www.mysqljs.com untuk terhubung ke MySQL dari Javascript menggunakan kode sebagai berikut:

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

Harus disebutkan bahwa ini bukan cara yang aman untuk mengakses MySql, dan hanya cocok untuk demo pribadi, atau skenario di mana kode sumber tidak dapat diakses oleh pengguna akhir, seperti dalam aplikasi Phonegap iOS.

Fiach Reid
sumber
Setelah pemeriksaan cepat, ini menimbulkan ancaman untuk mencuri kredensial database seperti yang terlihat pada baris 6 pada skrip yang menyatakanvar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas
@Dragas - Itu benar. javascript tidak memiliki cara asli untuk terhubung ke database mysql, oleh karena itu dll mysql di-host di sisi server, maka panggilan AJAX. Ini juga berarti bahwa jika Anda menggunakan firewall pada port 3306, Anda perlu membukanya untuk koneksi masuk dari mysqljs.com
Fiach Reid
1

Ya kamu bisa. Konektor MySQL menggunakan TCP untuk koneksi, dan di JS ada versi klien TCP yang dimodifikasi kecil yang disebut Websocket. Tetapi Anda tidak dapat langsung terhubung ke server MySQL dengan websocket. Anda akan membutuhkan beberapa jembatan pihak ke-3 antara websocket dan mysql. Ini menerima permintaan dari websocket, mengirimkannya ke mysql, hasil respon dan mengirim ulang ke JS.

Dan ini adalah contoh jembatan saya yang ditulis dalam C # dengan pustaka 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();
    }
}

Sisi JS:

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

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

ws.send("select * from users");
Badai Otak
sumber
0

Tidak.

Anda perlu menulis pembungkus dalam PHP, lalu mengekspor data yang dikembalikan (mungkin sebagai Json). JANGAN PERNAH, dapatkan kode SQL dari "_GET" Anda, karena ini disebut injeksi SQL (orang yang mempelajarinya akan memiliki kontrol penuh atas database Anda).

Ini adalah contoh yang saya tulis:

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

Tolong pelajari tentang injeksi SQL.

elcuco
sumber
0

Anda dapat terhubung ke MySQL dari Javascript melalui applet JAVA. Applet JAVA akan menanamkan driver JDBC untuk MySQL yang memungkinkan Anda untuk terhubung ke MySQL.

Ingatlah bahwa jika Anda ingin terhubung ke server MySQL jarak jauh (selain yang Anda gunakan untuk mengunduh applet), Anda harus meminta pengguna untuk memberikan izin tambahan ke applet. Secara default, applet hanya dapat terhubung ke server tempat mereka diunduh.

Rajiv
sumber
0

Jika Anda tidak terkunci di MySQL, Anda dapat beralih ke PostgreSQL. Ini mendukung prosedur JavaScript (PL / V8) di dalam database. Ini sangat cepat dan kuat. Lihat posting ini .

ramigg
sumber
0

JavaScript tidak dapat terhubung langsung ke DB untuk mendapatkan data yang dibutuhkan tetapi Anda dapat menggunakan AJAX. Untuk memudahkan request AJAX ke server Anda bisa menggunakan jQuery JS framework http://jquery.com . Berikut ini contoh kecilnya

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
sumber
1
di mana kueri MySQL dalam contoh ini?
Michael
@ Michael: Pertanyaan bagus.
Connor Gurney
-1

Saya mengerti pertanyaan Anda Saya pikir Anda bingung dengan bahasa seperti dot.net dan java di mana Anda dapat membuka koneksi DB dalam kode Anda. Tidak, JavaScript tidak dapat langsung terhubung ke MySQL karena JavaScript adalah bahasa skrip sisi klien (Pengecualian Node.js). Anda memerlukan lapisan tengah seperti RESTful API untuk mengakses data.

Sagittarius
sumber
-3

Anda dapat menambahkan koneksi mysql menggunakan file PHP. Di bawah ini adalah contoh 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);
   ?> }
Shivu09
sumber
Sebenarnya itu bukan jawaban. Pertanyaannya adalah Can JavaScript connect with MySQL?.
Alex.K.
Ini nol persen relevan dengan pertanyaan yang diajukan. Penulis pertanyaan sangat spesifik tentang Javascript.
geekgugi