JavaScript MySQL ile bağlanabilir mi?


113

JavaScript MySQL ile bağlanabilir mi? Öyleyse nasıl?


hayır, tarayıcıdaki JavaScript hakkında konuşmuyorsanız.
Luca Matteis

2
Peki ya sunucu tarafı JavaScript (örneğin Rhino aracılığıyla)? bir veritabanına bağlanabilir miyiz?
Joand

7
Veya Node.js de çalışacak
Gabriel Fair

1
Bu sayfadaki tüm cevapları görmezden gelin çünkü hepsi yanlış. Aslında yapılabilir. Bkz developer.chrome.com/apps/app_network
Pacerier

Kabul edilen cevap tamamen yanlıştır (ve 2010'da da öyleydi). Bu cevap doğrudur.
TJ Crowder

Yanıtlar:


26

Hayır, JavaScript doğrudan MySQL'e bağlanamaz. Ancak bunu yapmak için JS ile PHP'yi karıştırabilirsiniz.

JavaScript, istemci tarafı bir dildir ve MySQL veritabanınız bir sunucuda çalışacaktır


87
küçük not: JavaScript'in istemci tarafında çalışmasının, bir Veritabanı Sunucusuna bağlanamaması gerçeğiyle hiçbir ilgisi yoktur. Dilin gelecekteki bir sürümünün uzak veritabanlarına erişmek için API'ler eklemesi çok iyi olabilir (yine de, pek olası değildir).
Lucas Pottersky

3
Buna "JS ile PHP'yi karıştır" demezdim. Yapabilecekleriniz, PHP Kodunun önceden MySQL'den aldığı JavaScript Kodu / Verileri (örneğin json, örneğin) oluşturmasına izin vermektir. Veya php kodunun MySQL'den aldığı verilere erişmek için bir http (json / REST / SOAP / ... her neyse) arayüzü sağlamak için bir sunucuda PHP'yi kullanabilirsiniz - ve bu http arayüzü, esas olarak herhangi bir yerde çalışan JavaScript kodu tarafından çağrılabilir. bir brwoser. Bugün itibariyle, JavaScript'in istemci tarafı olduğunu söylemek de artık geçerli değil - örneğin Node.js'yi kontrol edin.
Henning

14
"JavaScript, istemci tarafı bir dildir" Mutlaka değil: Java'dan fazlası değil.
LeeGee

2
mysql 5.7'nin yeni sürümü ile httpclient, http eklentisini (mysql 5.7 için oluşturulmuş) kullanarak mysql veritabanıyla doğrudan iletişim kurabilir
Atul Chaudhary

Sitenize erişen tüm tarayıcıların doğrudan MySQL sunucunuza erişen javascript dosyasına yerel olarak sahip olması bir şekilde bir güvenlik riski oluşturmaz mı?
Vassilis

85

İstemci tarafı JavaScript, bir tür köprü olmadan MySQL'e erişemez. Ancak, JavaScript'in yalnızca bir istemci tarafı dili olduğuna dair yukarıdaki kalın ifadeler yanlıştır - JavaScript, Node.js'de olduğu gibi istemci tarafında ve sunucu tarafında çalışabilir.

Node.js, https://github.com/sidorares/node-mysql2 gibi bir şey aracılığıyla MySQL'e erişebilir

Socket.IO kullanarak da bir şeyler geliştirebilirsiniz.

İstemci tarafı JS uygulamasının MySQL'e erişip erişemeyeceğini mi sormak istediniz? Bu tür kütüphanelerin var olup olmadığından emin değilim, ama mümkün.

DÜZENLEME : Yazmaya başladığımızdan beri artık MySQL Kümesine sahibiz :

Node.js için MySQL Kümesi JavaScript Sürücüsü tam da göründüğü gibi - verilerinizi okumak ve yazmak için doğrudan JavaScript kodunuzdan çağrılabilen bir bağlayıcıdır. Veri düğümlerine doğrudan eriştiği için, bir MySQL Sunucusundan geçerken fazladan gecikme olmaz ve JavaScript kodundan // nesnelerinden SQL işlemlerine dönüştürülmesi gerekir. Herhangi bir nedenle, bir MySQL Sunucusundan geçmesini tercih ederseniz (örneğin, InnoDB'de tablolar depoluyorsanız), o zaman bu yapılandırılabilir.


53

JavaScript kullanarak bir MySQL veritabanına bağlanmak istiyorsanız, Node.js ve mysql adlı bir kitaplığı kullanabilirsiniz . Sorgular oluşturabilir ve sonuçları bir kayıt dizisi olarak alabilirsiniz. Denemek isterseniz, bir arka uç oluşturmak için proje oluşturucumu kullanabilir ve bağlanmak için veritabanı olarak MySQL'i seçebilirsiniz . Ardından, yeni REST API'nizi veya GraphQL uç noktanızı öne çıkarın ve MySQL veritabanınızla çalışmaya başlayın.


NOSTALJİ'DEN KALAN ESKİ CEVAP

SONRA

Soruyu anladığım ve hatalıysam beni düzelttiğim için, yalnızca istemci tarafında JavaScript bulunan klasik sunucu modelini ifade ediyor. Bu klasik modelde, LAMP sunucularına (Linux, Apache, MySQL, PHP) veritabanı ile temas halinde dile böylece PHP yazmak gerekir ve veritabanına istek verilerine PHP oldu yankı müşteriye iade verileri. Temel olarak dillerin fiziksel makinelere göre dağılımı şöyleydi:

  1. Sunucu Tarafı: PHP ve MySQL.
  2. İstemci Tarafı: HTML / CSS ve JavaScript.

Bu, aşağıdaki işlevselliğe sahip olduğumuz bir MVC modeline (Model, Görünüm, Denetleyici) yanıt verdi:

  1. MODEL: Model, verilerle ilgilenen şeydir, bu durumda, değişkenleri yöneten veya bu durumda MySQL veritabanımızda depolanan verilere erişen ve bunu müşteriye JSON verisi olarak gönderen PHP betikleri.
  2. GÖRÜNÜM: Görünüm bizim gördüğümüz şeydir ve modelden tamamen bağımsız olmalıdır. Sadece modelin içerdiği verileri göstermesi gerekir, ancak bununla ilgili verileri içermemelidir. Bu durumda, görünüm HTML ve CSS kullanır. Görünümün temel yapısını oluşturmak için HTML ve bu temel yapıya şekil vermek için CSS.
  3. DENETLEYİCİ: Denetleyici, modelimiz ile görüşümüz arasındaki arayüzdür. Bu durumda kullanılan dil JavaScript'tir ve modelin bize gönderdiği verileri JSON paketi olarak alıp HTML yapısını sunan konteynerlere koyar. Denetleyicinin modelle etkileşim kurma şekli AJAX kullanmaktır . Sunucu tarafındaki PHP betiklerini çağırmak ve sunucudan dönen verileri yakalamak için GET ve POST yöntemlerini kullanıyoruz .

Denetleyici için, HTML yapısını (DOM) kontrol etmek için "düşük düzeyli" kitaplık olarak jQuery gibi gerçekten ilginç araçlarımız ve daha sonra farklı bağlantı kuran gözlemciler oluşturmamızı sağlayan Knockout.js gibi yeni, daha yüksek düzeyli araçlarımız var. Olaylar gerçekleştiğinde bunları güncelleyen DOM öğeleri. Aynı şekilde çalışan, ancak tam bir ortam gibi görünen Google'dan Angular.js de var . Aralarından seçim yapmanıza yardımcı olmak için, burada iki aracın iki mükemmel analizine sahipsiniz : Knockout - Angular.js ve Knockout.js - Angular.js . Ben hala okuyorum Umarım sana yardım ederler.

ŞİMDİ

Node.js tabanlı modern sunucularda, her şey için JavaScript kullanıyoruz. Node.js, Google V8, Chrome JavaScript motoru ile çalışan birçok kitaplığa sahip bir JavaScript ortamıdır. Bu yeni sunucularla çalışma şeklimiz:

  1. Node.js ve Express : Sunucunun oluşturulduğu ana bilgisayar. Birkaç satır kod içeren bir sunucu oluşturabilir veya hatta sunucuyu oluşturmayı daha da kolaylaştırmak için Express gibi kitaplıkları kullanabiliriz. Node.js ve Express ile müşterilerimizden sunucuya gelen dilekçeleri yönetecek ve uygun sayfalarla cevap vereceğiz.
  2. Jade : Şablonlama dili kullandığımız sayfaları oluşturmak için, bu durumda Jade, HTML yazarken web sayfaları yazmamıza izin veriyor, ancak farklılıklar içeriyor (biraz zaman alıyor ama öğrenmesi kolay). Daha sonra, müşterinin dilekçelerini yanıtlamak için sunucunun kodunda, Jade kodunu "gerçek" bir HTML koduna dönüştürmemiz yeterlidir.
  3. Stylus : Jade'e benzer ancak CSS için. Bu durumda, stylus dosyasını sayfamız için gerçek bir CSS dosyasına dönüştürmek için bir ara yazılım işlevi kullanıyoruz.

O zaman NPM (Node.js paket yöneticisi) kullanarak kurabileceğimiz ve bunları doğrudan Node.js sunucumuzda kullanabileceğimiz birçok paketimiz var (Node.js öğrenmek isteyenler için bu başlangıç ​​eğitimini deneyin genel bakış için). Ve bu paketler arasında, veritabanlarına erişmek için bunlardan bazılarına sahipsiniz. Bunu kullanarak, My SQL veritabanlarına erişmek için sunucu tarafındaki JavaScript'i kullanabilirsiniz.

Ancak Node.js ile çalışacaksanız yapabileceğiniz en iyi şey , JSON dosyalarına dayalı MongoDB gibi yeni NoSQL veritabanlarını kullanmaktır . MySQL gibi tabloları depolamak yerine, verileri JSON yapılarında depolar, böylece en büyüğünün boyutu için devasa tablolar oluşturmak yerine her yapının içine uzun sayısal vektörler gibi farklı veriler koyabilirsiniz.

Umarım bu kısa açıklama sizin için yararlı olur ve bu konuda daha fazla bilgi edinmek isterseniz, burada kullanabileceğiniz bazı kaynaklara sahipsiniz:

  • Egghead : Bu site JavaScript ve çevresi hakkında harika kısa eğitimlerle doludur. Denemeye değer. Ve zaman zaman indirim yapıyorlar.
  • Code School : İstemci tarafını test etmenize yardımcı olacak Chrome Geliştirici araçlarıyla ilgili ücretsiz ve çok ilginç bir kursla.
  • Codecademy : HTML, CSS, JavaScript, jQuery ve PHP hakkında çevrimiçi örneklerle takip edebileceğiniz ücretsiz kurslar.
  • 10gen Education : MongoDB hakkında bilmeniz gereken her şeyi, farklı diller için eğitimlerde bulabilirsiniz.
  • W3Schools : Burada tüm bunlarla ilgili öğreticiler var ve onu bir referans yeri olarak kullanabilirsiniz çünkü çok sayıda kısa kod örneği gerçekten yararlıdır.
  • Udacity : Web geliştirme ile ilgili birkaç ilginç konuyla farklı konular hakkında ücretsiz video kursları olan bir yer ve benim tercih ettiğim, JavaScript ile 3D grafikler için harika bir WebGL kursu.

Umarım başlamanıza yardımcı olur.

İyi eğlenceler!


Mekaniği açıklayan güzel ayrıntılı cevap.
Duane

Teşekkürler :) Sorunu çözmek için cevabın sonuna bir güncelleme ekledim. "Mysql" adlı kitaplığa sahip bir düğüm sunucusu kullanabilirsiniz ve yeni bir API projesi başlatmak için kullanabileceğiniz, oluşturduğum bir API oluşturucusuna bir bağlantı ekledim. Umarım yardımcı olur.
Timbergus

Yeniden "sonra": Sunucu tarafında kullanılan JavaScript, Netscape Enterprise Server'a eklendiği 1995 yılına kadar gider. Microsoft, kısa süre sonra IIS sunucusuna "JScript" koydu. Sunucudaki JavaScript uzaktan, yeni değil.
TJ Crowder

Bence bu cevap en yeni bilgi en üstte yer alsa veya sadece eski güncel olmayan bilgileri silse iyi olur. Aynı zamanda biraz ayrıntılı ve belirli dillere odaklanıyor. Kısa cevap, JavaScript'in bir MySQL veritabanına doğrudan Node.JS'den (veya diğer sunucu tarafı çalışma zamanı ortamından) bağlanmak için kullanılabileceği, ancak kasıtlı tarayıcı güvenliği nedeniyle tarayıcıdan kullanılamayacağıdır.
Caltor

8

Denkleme PHP gibi bir şey eklemeniz gerektiğini düşünüyorum. PHP veritabanı ile etkileşime girebilir ve ardından Javascript ile AJAX çağrıları yapabilirsiniz.


8

Biraz geç ama son zamanlarda MySql 5.7'nin http eklentisi aldığını öğrendim ve bu eklenti şu anda doğrudan mysql'e bağlanabilir.

Mysql 5.7 için Http İstemcisini arayın


7

Basit cevap: hayır.

JavaScript, tarayıcıda çalışan bir istemci tarafı dilidir ( node.js buna rağmen) ve MySQL, sunucuda çalışan bir sunucu tarafı teknolojisidir.

Bu, veritabanına bağlanmak için genellikle ASP.NET veya PHP gibi bir sunucu tarafı dili kullandığınız anlamına gelir.


Javascript (istemci tarafında, tarayıcı biçiminde), sunucuda çalışan sunucu tarafı teknolojilere (Apache, Nginx, PHP, NodeJS, vb.) Bağlanmak için her gün kullanılır. Sunucu / istemcinin tanımı, aralarındaki "bölünmenin" üstesinden gelinebilir olmasını gerektirir.
jeteon

6

EVET? Bir meteora bak. Bağlantılar:

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

Nasıl yapıldığını anlamıyorum. Ama Nettuts + bu şeyi javascript-ajax bölümüne koydu, belki sihir olur.

Ayrıca, JS ile MongoDB'ye bağlanmanın ve eklemenin bir yolunu da gösterir, örneğin:

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
"Sunucu tarafı bir veritabanı sürücüsü ve / veya alternatif bir API uygulayan bir istemci tarafı önbelleği sağlayarak MongoDB için başka bir veritabanını değiştirebilirsiniz. Mongo-livingata, böyle bir proje için iyi bir başlangıç ​​noktasıdır." - docs.meteor.com
LeeGee

Meteor Node.js kullanılarak yazıldı, bu yüzden korkarım bu cevap yeni bir şey eklemiyor veya bir şeyleri değiştirmiyor. Sadece istemci ve sunucuyu kapsayan bir çerçeveye sahipsiniz.
Caltor

4

Ortamınıza bağlı olarak, bunu yapmak için Rhino'yu kullanabilirsiniz, bkz. Rhino web sitesi . Bu, JavaScript'in içinden tüm Java kitaplıklarına erişmenizi sağlar.



2

Tipik olarak, MySQL'e bağlanmak için PHP gibi bir sunucu tarafı kodlama diline ihtiyacınız vardır, ancak yalnızca hızlı bir modelleme yapıyorsanız, http://www.mysqljs.com adresini kullanarak Javascript'ten MySQL'e bağlanabilirsiniz. aşağıdaki gibidir:

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

Bunun MySql'e erişmenin güvenli bir yolu olmadığı ve yalnızca özel demolar veya Phonegap iOS uygulamaları gibi son kullanıcılar tarafından kaynak koduna erişilemeyen senaryolar için uygun olduğu belirtilmelidir.


Hızlı bir incelemeden sonra, bu, komut dosyasının 6. satırında görüldüğü gibi veritabanı kimlik bilgilerinin çalınması için bir tehdit oluştururvar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas

@Dragas - Bu doğru. javascript'in bir mysql veritabanına bağlanmak için yerel bir yolu yoktur, bu nedenle mysql dll sunucu tarafında barındırılır, dolayısıyla AJAX çağrısı yapılır. Ayrıca, 3306 numaralı bağlantı noktasında bir güvenlik duvarı kullanıyorsanız, bunu mysqljs.com'dan gelen bağlantılara açmanız gerektiği anlamına gelir
Fiach Reid


1

Evet yapabilirsin. MySQL bağlayıcıları bağlantı için TCP kullanır ve JS'de Websocket adlı TCP istemcisinin biraz değiştirilmiş bir sürümü vardır. Ancak websocket ile MySQL sunucusuna doğrudan bağlanamazsınız. Websocket ve mysql arasında bazı 3. parti köprülere ihtiyacınız olacak. Websocket'den sorgu alır, mysql'e gönderir, yanıt sonucu ve JS'ye tekrar gönderir.

Ve bu, websocket-keskin kitaplığı ile C # ile yazılmış örnek köprüm:

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 tarafı:

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

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

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

0

Hayır.

PHP'de bir sarmalayıcı yazmanız ve sonra döndürülen verileri dışa aktarmanız gerekir (muhtemelen Json olarak). ASLA, "_GET" inizden SQL kodunu almayın, buna SQL enjeksiyonu denir (bunu öğrenen kişiler veritabanınız üzerinde tam kontrole sahip olacaklardır).

Bu yazdığım bir örnek:

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

Lütfen SQL enjeksiyonları hakkında bilgi edinin.


0

MySQL'e Javascript'ten bir JAVA uygulaması aracılığıyla bağlanabilirsiniz. JAVA uygulaması, MySQL'e bağlanmanıza izin verecek olan MySQL için JDBC sürücüsünü yerleştirecektir.

Uzak bir MySQL sunucusuna bağlanmak istiyorsanız (uygulamayı indirdiğinizin dışında), kullanıcılardan uygulama için genişletilmiş izinler vermelerini istemeniz gerektiğini unutmayın. Varsayılan olarak, uygulama yalnızca indirildikleri sunucuya bağlanabilir.


0

MySQL'de kilitli değilseniz PostgreSQL'e geçebilirsiniz. Veritabanı içindeki JavaScript prosedürlerini (PL / V8) destekler. Çok hızlı ve güçlüdür. Bu gönderiye göz atın .


0

JavaScript, gerekli verileri almak için doğrudan DB'ye bağlanamaz, ancak AJAX'ı kullanabilirsiniz. Sunucuya kolay AJAX isteği yapmak için jQuery JS çerçevesini http://jquery.com kullanabilirsiniz . İşte küçük bir örnek

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
bu örnekte MySQL sorgusu nerede?
Michael

@Michael: Harika soru.
Connor Gurney

-1

Sorunuzu anladım, kodunuz içinde DB bağlantısını açabileceğiniz dot.net ve java gibi dillerle karıştırdığınızı düşünüyorum. Hayır, JavaScript, bir istemci tarafı kodlama dili olduğundan (İstisna Node.js) MySQL'e doğrudan bağlanamaz. Verilere erişmek için RESTful API gibi bir orta katmana ihtiyacınız vardır.


-3

PHP dosyasını kullanarak mysql bağlantısı ekleyebilirsiniz. Aşağıda PHP dosyası örneği verilmiştir.

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

Aslında bu bir cevap değil. Soru şuydu Can JavaScript connect with MySQL?.
Alex.K.

Bu, sorulan soruyla yüzde sıfır alakalı. Sorunun yazarı, Javascript hakkında çok spesifik davrandı.
geekgugi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.