Чи може JavaScript з'єднатися з MySQL?


113

Чи може JavaScript з'єднатися з MySQL? Якщо так, то як?


ні, якщо ви не говорите про JavaScript у браузері.
Лука Маттейс

2
Що з сервером JavaScript (наприклад, через Rhino)? чи можемо ми підключитися до бази даних?
Джоанд

7
Або також буде працювати Node.js
Габріель Ярмарок

1
Ігноруйте всі відповіді на цій сторінці, оскільки всі вони помиляються. Насправді це можна зробити. Дивіться developer.chrome.com/apps/app_network
Pacerier

Прийнята відповідь просто невірна (і в 2010 році теж). Ця відповідь правильна.
TJ Crowder

Відповіді:


26

Ні, JavaScript не може безпосередньо підключатися до MySQL. Але ви можете змішати JS з PHP для цього.

JavaScript - це клієнтська мова, і ваша база даних MySQL буде працювати на сервері


87
невелика примітка: той факт, що JavaScript працює на стороні клієнта, НЕМАЄ нічого спільного з тим, що він не може підключитися до сервера баз даних. Це може бути дуже добре (хоча, вкрай малоймовірно), щоб майбутня версія мови додала API для доступу до віддалених баз даних.
Лукас Поттерський

3
Я б не називав це "змішати JS з PHP", хоча. Що ви можете зробити, це нехай PHP-код генерує JavaScript-код / ​​дані (json, наприклад), які вони заздалегідь отримали з MySQL. Або ви можете використовувати PHP на сервері, щоб надати http (json / REST / SOAP / ... що завгодно) інтерфейс для доступу до даних, які PHP-код отримує з MySQL - і цей http-інтерфейс можна викликати кодом JavaScript, який працює в будь-якому місці, в основному brwoser. На сьогоднішній день також сказати, що JavaScript є клієнтською стороною більше не актуально - перевірте, наприклад, Node.js.
Хеннінг

14
"JavaScript є мовою на стороні клієнта" Не обов'язково: не більше ніж Java.
LeeGee

2
з новою версією mysql 5.7 httpclient може спілкуватися безпосередньо з базою даних mysql, використовуючи плагін http (побудований для mysql 5.7)
Atul Chaudhary

Чи не було б якимось чином ризиком безпеки для всіх браузерів, що звертаються до вашого сайту, локально мати файл JavaScript, який безпосередньо отримує доступ до вашого сервера MySQL?
Василіс

85

Клієнтський JavaScript не може отримати доступ до MySQL без якогось моста. Але наведені вище сміливі твердження про те, що JavaScript є лише мовою на стороні клієнта, є невірними - JavaScript може працювати на стороні клієнта та на сервері, як у Node.js.

Node.js може отримати доступ до MySQL через щось на зразок https://github.com/sidorares/node-mysql2

Ви також можете розробити щось за допомогою Socket.IO

Ви хотіли запитати, чи може клієнтська програма JS мати доступ до MySQL? Я не впевнений, чи існують такі бібліотеки, але вони можливі.

EDIT : З моменту написання, тепер у нас є кластер MySQL :

Драйвер MySQL Cluster JavaScript для Node.js - це саме те, що це звучить, як це - це роз'єм, який можна викликати безпосередньо з вашого коду JavaScript для читання та запису ваших даних. Оскільки він отримує доступ до вузлів даних безпосередньо, немає зайвої затримки від проходження через сервер MySQL і не потрібно перетворювати з коду JavaScript // об'єкти в операції SQL. Якщо з якоїсь причини ви вважаєте за краще пройти через сервер MySQL (наприклад, якщо ви зберігаєте таблиці в InnoDB), то це можна налаштувати.


53

Якщо ви хочете підключитися до бази даних MySQL за допомогою JavaScript, ви можете використовувати Node.js та бібліотеку під назвою mysql . Ви можете створювати запити та отримувати результати як масив регістрів. Якщо ви хочете спробувати, ви можете використовувати мій генератор проектів, щоб створити бекенд і вибрати MySQL як базу даних для підключення. Потім просто виставіть нову кінцеву точку REST API або GraphQL на фронт і починайте працювати з вашою базою даних MySQL.


СТАРИЙ ВІДПОВІДЬ ЛІВО НОСТАЛГІЇ

ТОДІ

Оскільки я розумію питання і мене виправляють, якщо я помиляюся, воно стосується класичної моделі сервера з JavaScript лише на стороні клієнта. У цій класичній моделі із серверами LAMP (Linux, Apache, MySQL, PHP) мовою, що контактувала з базою даних, був PHP, тому для запиту даних у базу даних потрібно написати сценарії PHP та повторити дані клієнту, що повертається. В основному, розподіл мов за фізичними машинами був:

  1. Сторона сервера: PHP та MySQL.
  2. Сторона клієнта: HTML / CSS та JavaScript.

Це відповіло на модель MVC (Model, View, Controller), де ми мали таку функціональність:

  1. МОДЕЛЬ: Модель - це те, що стосується даних, в даному випадку - PHP-скриптів, які керують змінними або отримують доступ до даних, що зберігаються, в цьому випадку в нашій базі даних MySQL і передають їх як дані JSON клієнту.
  2. ВИДІЛ: Погляд - це те, що ми бачимо, і він повинен бути повністю незалежним від моделі. Просто потрібно показати дані, що містяться в моделі, але вона не повинна мати відповідних даних про неї. У цьому випадку представлення використовує HTML та CSS. HTML для створення основної структури представлення, а CSS для надання форми цій базовій структурі.
  3. КОНТРОЛЕР: Контролер - це інтерфейс між нашою моделлю та нашим представленням. У цьому випадку використовувана мова - JavaScript, і вона бере дані, які модель надсилає нам як пакет JSON і поміщає їх всередину контейнерів, що пропонують структуру HTML. Спосіб взаємодії контролера з моделлю здійснюється за допомогою AJAX . Ми використовуємо методи GET і POST для виклику скриптів PHP на стороні сервера та для вилучення повернених даних із сервера.

Для контролера у нас є дійсно цікаві інструменти, такі як jQuery , як "низькорівнева" бібліотека для управління структурою HTML (DOM), а потім нові, більш високі рівні, як Knockout.js, які дозволяють нам створювати спостерігачі, які з'єднують різні Елементи DOM, оновлюючи їх, коли відбуваються події. Існує також Angular.js від Google, який працює аналогічно, але здається повноцінним середовищем. Щоб допомогти вам вибрати серед них, тут у вас є два чудових аналізи двох інструментів: Knockout vs. Angular.js та Knockout.js vs. Angular.js . Я все ще читаю. Сподіваюся, вони допоможуть вам.

ЗАРАЗ

У сучасних серверах, що базуються на Node.js, ми використовуємо JavaScript для всього. Node.js - середовище JavaScript з багатьма бібліотеками, які працюють з Google V8, двигуном JavaScript JavaScript. Як ми працюємо з цими новими серверами:

  1. Node.js та Express : основний кадр, де побудований сервер. Ми можемо створити сервер з кількома рядками коду або навіть використовувати бібліотеки типу Express, щоб зробити сервер ще простішим. За допомогою Node.js та Express ми будемо керувати петиціями на сервері від клієнтів та відповідатимемо їм на відповідних сторінках.
  2. Джейд : Для створення сторінок ми використовуємо мову шаблонів, в цьому випадку Джейд, які дозволяють нам писати веб-сторінки так, як ми писали HTML, але з відмінностями (це займає небагато часу, але це легко вивчити). Потім у коді сервера, щоб відповісти на прохання клієнта, нам просто потрібно перетворити код Jade у "справжній" HTML-код.
  3. Стилус : Подібно до Jade, але для CSS. У цьому випадку ми використовуємо функцію середнього програмного забезпечення для перетворення файлу стилуса в реальний CSS-файл для нашої сторінки.

Тоді у нас є маса пакунків, які ми можемо встановити за допомогою NPM (менеджера пакунків Node.js) та використовувати їх безпосередньо на нашому сервері Node.js, який просто потребує цього (для тих, хто хоче вивчити Node.js, спробуйте цей підручник для початківців для огляду). І серед цих пакетів у вас є деякі з них для доступу до баз даних. Використовуючи це, ви можете використовувати JavaScript на стороні сервера для доступу до моїх баз даних SQL.

Але найкраще, що ви можете зробити, якщо ви збираєтеся працювати з Node.js - це використовувати нові бази даних NoSQL, як MongoDB , засновані на файлах JSON. Замість того, щоб зберігати таблиці типу MySQL, він зберігає дані в структурах JSON, тому ви можете помістити різні дані всередині кожної структури, як довгі числові вектори, замість створення величезних таблиць розміром з найбільшої.

Я сподіваюся, що це коротке пояснення стане для вас корисним, і якщо ви хочете дізнатися більше про це, тут ви можете використати деякі ресурси:

  • Egghead : Цей сайт сповнений чудових коротких навчальних посібників про JavaScript та його оточення. Варто спробувати. І час від часу робіть знижки.
  • Школа шкіл : З безкоштовним та дуже цікавим курсом про інструменти для розробників Chrome, які допоможуть вам протестувати клієнта.
  • Codecademy : Безкоштовні курси з HTML, CSS, JavaScript, jQuery та PHP, які ви можете наслідувати за допомогою онлайн-прикладів.
  • 10gen Освіта : З усім, що потрібно знати про MongoDB в навчальних посібниках для різних мов.
  • W3Schools : у цьому є підручники щодо всього цього, і ви можете використовувати його як орієнтир, оскільки в ньому є дуже багато прикладів коротких кодів, дійсно корисних.
  • Udacity : місце з безкоштовними відео-курсами з різних предметів з кількома цікавими з веб-розробки та моїм улюбленим, дивовижним курсом WebGL для 3D-графіки з JavaScript.

Я сподіваюся, що це допоможе вам почати.

Веселіться!


Приємна детальна відповідь, що пояснює механіку.
Дуейн

Дякую :) Я щойно додав оновлення до кінця відповіді, щоб вирішити проблему. Ви можете використовувати сервер вузлів з бібліотекою під назвою "mysql", і я додав посилання до створеного мною генератора API, який ви можете використовувати для запуску нового проекту API. Сподіваюся, це допомагає.
Тімбергус

Повторно "потім": JavaScript, що використовується на сервері, починається з 1995 року, коли він був включений до сервера Netscape Enterprise. Microsoft незабаром після цього помістила "JScript" на свій IIS-сервер. JavaScript на сервері віддалено не новий.
TJ Crowder

Я думаю, було б добре, якби ця відповідь мала найновішу інформацію вгорі або просто видалила стару застарілу інформацію. Це також трохи детально і зосереджено на окремих мовах. Коротка відповідь полягає в тому, що JavaScript може використовуватися для підключення до бази даних MySQL безпосередньо з Node.JS (або іншого середовища виконання сервера), але не через браузер через навмисну ​​безпеку браузера.
Caltor

8

Я думаю, вам потрібно буде додати щось подібне до PHP до рівняння. PHP взаємодіє з базою даних, і тоді ви можете здійснювати дзвінки AJAX за допомогою Javascript.


8

Трохи пізно, але нещодавно я дізнався, що MySql 5.7 отримав http-плагін, через який користувач може безпосередньо підключитися до mysql зараз.

Шукайте Http-клієнта для mysql 5.7


7

Проста відповідь: ні.

JavaScript - це клієнтська мова, яка працює в браузері ( незважаючи на node.js ), а MySQL - це технологія на сервері, яка працює на сервері.

Це означає, що для підключення до бази даних зазвичай використовується мова на сервері, наприклад ASP.NET або PHP.


Javascript (у формі клієнта, форма браузера) використовується щодня для підключення до серверних технологій (Apache, Nginx, PHP, NodeJS тощо), що працюють на сервері. Саме визначення сервера / клієнта вимагає, щоб "поділ" між ними був непереборним.
jeteon

6

ТАК? Подивіться метеор. Посилання:

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

Я не розумію, як це робиться. Але Nettuts + помістив цю річ у розділ javascript-ajax, можливо, трапляється магія.

Він також показує певний спосіб підключення та вставки до MongoDB за допомогою JS, наприклад:

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
"Ви можете замінити іншу базу даних для MongoDB, надавши драйвер бази даних на стороні сервера та / або кеш на стороні клієнта, який реалізує альтернативний API. Mongo-livedata є хорошою відправною точкою для такого проекту." - docs.meteor.com
LeeGee

Метеор був написаний за допомогою Node.js, тому я боюся, що ця відповідь не додасть нічого нового або змінить речі. У вас просто є структура, яка охоплює клієнта та сервера.
Caltor

4

Залежно від вашого оточення, ви можете використовувати Rhino для цього, перегляньте веб-сайт Rhino . Це дає вам доступ до всіх бібліотек Java зсередини JavaScript.


4

Так. Існує плагін HTTP для MySQL.

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

Я зараз просто гуглю з цього приводу, що привело мене до цього питання про stackoverflow. Ви повинні мати можливість AJAX базу даних MySQL зараз або найближчим часом (вони стверджують, що вона не готова до виробництва).


2

Як правило, для підключення до MySQL вам потрібна мова скриптів на стороні сервера, як PHP, однак, якщо ви просто робите швидкий макет, тоді ви можете використовувати http://www.mysqljs.com для підключення до MySQL з Javascript за допомогою коду як наступним чином:

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

Слід зазначити, що це не безпечний спосіб доступу до MySql, і він підходить лише для приватних демонстрацій або сценаріїв, де вихідний код не може отримати доступ кінцевими користувачами, наприклад, в додатках Phonegap iOS.


Після швидкої перевірки це створює загрозу викрадення облікових даних бази даних, як це видно в рядку 6 у тому сценарії, в якому зазначеноvar strSrc = "http://mysqljs.com/sql.aspx?";
Драгас

@Dragas - саме так. javascript не має власного способу підключення до бази даних mysql, тому dll mysql розміщений на стороні сервера, отже, виклик AJAX. Це також означає, що якщо ви використовуєте брандмауер на порту 3306, вам потрібно відкрити це для вхідних з'єднань з mysqljs.com
Fiach Reid,


1

Так, ти можеш. MySQL-роз'єми використовують TCP для підключення, а в JS є трохи змінена версія клієнта TCP під назвою Websocket. Але ви не можете безпосередньо підключитися до сервера MySQL за допомогою веб-сокета. Вам знадобиться якийсь сторонній міст між websocket та mysql. Він отримує запит від websocket, відправляє його в mysql, відповідає на відповідь та надсилає JS.

І це мій приклад міст, написаний на C # з бібліотекою-гострою веб-розеткою:

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:

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

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

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

0

Немає.

Вам потрібно написати обгортку в PHP, а потім експортувати повернені дані (можливо, як Json). НІКОЛИ, не отримуйте від свого "_GET" коду SQL, оскільки це називається ін'єкцією SQL (люди, які дізнаються це, матимуть повний контроль над вашою базою даних).

Це приклад, який я написав:

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

Дізнайтеся, будь ласка, про ін'єкції SQL.


0

Ви можете підключитися до MySQL з Javascript через аплет JAVA. Аплет JAVA вбудує драйвер JDBC для MySQL, що дозволить вам підключитися до MySQL.

Пам'ятайте, що якщо ви хочете підключитися до віддаленого сервера MySQL (крім того, з якого ви завантажили аплет), вам потрібно буде попросити користувачів надати розширені дозволи на аплет. За замовчуванням аплет може підключатися лише до того сервера, з якого завантажено.


0

Якщо ви не заблоковані на MySQL, ви можете перейти на PostgreSQL. Він підтримує процедури JavaScript (PL / V8) всередині бази даних. Це дуже швидко і потужно. Оформити цю публікацію .


0

JavaScript не може підключитися безпосередньо до БД, щоб отримати необхідні дані, але ви можете використовувати AJAX. Для спрощення запиту AJAX на сервер ви можете використовувати jQuery JS Framework http://jquery.com . Ось невеликий приклад

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
де в цьому прикладі запит MySQL?
Майкл

@Michael: Чудове запитання.
Коннор Герні

-1

Я зрозумів ваше запитання, я думаю, ви плутаєте його з такими мовами, як dot.net та java, де ви можете відкрити з'єднання з БД у своєму коді. Ні, JavaScript не може безпосередньо підключатися до MySQL, оскільки JavaScript є клієнтською мовою сценаріїв (виняток Node.js). Для доступу до даних вам потрібен середній рівень, як RESTful API.


-3

Ви можете додати з'єднання mysql, використовуючи файл PHP. Нижче наводиться приклад файлу 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);
   ?> }

Власне, це не відповідь. Питання було Can JavaScript connect with MySQL?.
Алекс.К.

Це нульовий відсоток, що стосується заданого питання. Автор питання був дуже специфічним щодо Javascript.
geekgugi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.