Может ли JavaScript соединяться с MySQL?


113

Может ли JavaScript соединяться с MySQL? Если да, то как?


нет, если вы не говорите о JavaScript в браузере.
Лука Маттеис,

2
А как насчет серверного JavaScript (например, через Rhino)? мы можем подключиться к базе данных?
Joand

7
Или Node.js тоже будет работать
Габриэль Фэйр

1
Игнорируйте все ответы на этой странице, потому что все они неверны. На самом деле это можно сделать. См developer.chrome.com/apps/app_network
Pacerier

Принятый ответ просто неверен (и был в 2010 году). Это правильный ответ .
TJ Crowder

Ответы:


26

Нет, JavaScript не может напрямую подключаться к MySQL. Но для этого вы можете смешивать JS с PHP.

JavaScript - это клиентский язык, и ваша база данных MySQL будет работать на сервере.


87
небольшое примечание: тот факт, что JavaScript работает на стороне клиента, НИЧЕГО не имеет отношения к тому факту, что он не может подключиться к серверу базы данных. Вполне возможно (хотя и весьма маловероятно), что будущая версия языка добавит API для доступа к удаленным базам данных.
Лукас Поттерски 01

3
Я бы не стал называть это «смешением JS с PHP». Что вы можете сделать, так это позволить PHP-коду генерировать код / ​​данные JavaScript (например, json), которые он заранее получил из MySQL. Или вы можете использовать PHP на сервере для предоставления интерфейса http (json / REST / SOAP / ... что угодно) для доступа к данным, которые код php извлекает из MySQL - и этот интерфейс http может быть вызван кодом JavaScript, работающим где угодно, в основном бравозер. На сегодняшний день утверждение о том, что JavaScript является клиентской стороной, больше не актуально - например, проверьте Node.js.
Хеннинг

14
«JavaScript - это клиентский язык» Не обязательно: не больше, чем Java.
LeeGee

2
с новой версией mysql 5.7 httpclient может напрямую связываться с базой данных mysql с помощью плагина http (созданного для mysql 5.7)
Атул Чаудхари,

Разве не было бы угрозой безопасности для всех браузеров, обращающихся к вашему сайту, локально иметь файл javascript, который напрямую обращается к вашему серверу MySQL?
Vassilis

86

Клиентский JavaScript не может получить доступ к MySQL без какого-либо моста. Но приведенные выше жирные утверждения о том, что JavaScript - это просто язык на стороне клиента, неверны - JavaScript может работать как на стороне клиента, так и на стороне сервера, как с Node.js.

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

Вы также можете разработать что-нибудь с помощью Socket.IO

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

РЕДАКТИРОВАТЬ : С момента написания у нас теперь есть MySQL Cluster :

Драйвер 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 (модель, представление, контроллер), где у нас были следующие функции:

  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 против Angular.js и Knockout.js против Angular.js . Я все еще читаю. Надеюсь, они тебе помогут.

СЕЙЧАС

На современных серверах, основанных на Node.js, мы используем JavaScript для всего. Node.js - это среда JavaScript со многими библиотеками, которые работают с Google V8, движком Chrome JavaScript. Мы работаем с этими новыми серверами:

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

Затем у нас есть много пакетов, которые мы можем установить с помощью NPM (диспетчера пакетов Node.js) и использовать их непосредственно на нашем сервере Node.js, который просто требует этого (для тех из вас, кто хочет изучить Node.js, попробуйте это руководство для начинающих. для обзора). И среди этих пакетов у вас есть некоторые из них для доступа к базам данных. Используя это, вы можете использовать JavaScript на стороне сервера для доступа к базам данных My SQL.

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

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

  • Egghead : этот сайт полон отличных коротких руководств по JavaScript и его среде. Стоит попробовать. И время от времени делать скидки.
  • Школа кода : бесплатный и очень интересный курс об инструментах разработчика Chrome, который поможет вам протестировать клиентскую часть.
  • Codecademy : бесплатные курсы по HTML, CSS, JavaScript, jQuery и PHP, за которыми вы можете следить с онлайн-примерами.
  • 10gen Education : все, что вам нужно знать о MongoDB, в учебных пособиях для разных языков.
  • W3Schools : В этом есть учебники обо всем этом, и вы можете использовать его в качестве справочного материала, потому что в нем есть много действительно полезных примеров шорткодов.
  • Udacity : место с бесплатными видеокурсами по различным предметам, включая несколько интересных, касающихся веб-разработки, и, что я предпочитаю, потрясающий курс WebGL для 3D-графики с JavaScript.

Надеюсь, это поможет вам начать.

Радоваться, веселиться!


Хороший подробный ответ, объясняющий механику.
Duane

Спасибо :) Я только что добавил обновление в конец ответа, чтобы решить проблему. Вы можете использовать сервер узлов с библиотекой под названием «mysql», и я добавил ссылку на созданный мной генератор API, который вы можете использовать для запуска нового проекта API. Надеюсь, поможет.
Timbergus

По поводу «тогда»: JavaScript, используемый на стороне сервера, восходит к 1995 году, когда он был включен в Netscape Enterprise Server. Вскоре после этого 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-liveata - хорошая отправная точка для такого проекта». - docs.meteor.com
LeeGee

Meteor был написан с использованием Node.js, поэтому я боюсь, что этот ответ не добавляет ничего нового и не меняет. У вас просто есть структура, которая охватывает клиент и сервер.
Caltor


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
Фиак Рид


1

Да, ты можешь. Соединители MySQL используют TCP для подключения, а в JS есть небольшая модифицированная версия клиента TCP под названием Websocket. Но вы не можете напрямую подключиться к серверу MySQL с помощью websocket. Вам понадобится сторонний мост между websocket и mysql. Он получает запрос от веб-сокета, отправляет его в mysql, результат ответа и повторно отправляет в JS.

И это мой пример моста, написанный на C # с библиотекой 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();
    }
}

Сторона 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-запрос в этом примере?
Майкл

@ Майкл: Отличный вопрос.
Коннор Герни

-1

Я понял ваш вопрос, я думаю, вы путаете его с такими языками, как dot.net и java, где вы можете открыть соединение с БД в своем коде. Нет, JavaScript не может напрямую подключаться к MySQL, поскольку JavaScript - это язык сценариев на стороне клиента (Exception 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?.
Alex.K.

Это ноль процентов соответствует заданному вопросу. Автор вопроса очень конкретизировал Javascript.
geekgugi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.