JavaScript peut-il se connecter à MySQL?

113

JavaScript peut-il se connecter à MySQL? Si c'est le cas, comment?

Anonyme le Grand
la source
non, sauf si vous ne parlez pas de JavaScript dans le navigateur.
Luca Matteis
2
Qu'en est-il du JavaScript côté serveur (par exemple via Rhino)? pouvons-nous nous connecter à une base de données?
Joand
7
Ou Node.js fonctionnera également
Gabriel Fair
1
Ignorez toutes les réponses sur cette page car elles sont toutes fausses. En fait, cela peut être fait. Voir developer.chrome.com/apps/app_network
Pacerier
La réponse acceptée est tout simplement fausse (et c'était aussi en 2010). Cette réponse est correcte.
TJ Crowder

Réponses:

26

Non, JavaScript ne peut pas se connecter directement à MySQL. Mais vous pouvez mélanger JS avec PHP pour ce faire.

JavaScript est un langage côté client et votre base de données MySQL va s'exécuter sur un serveur

Konradowy
la source
87
petite note: le fait que JavaScript s'exécute côté client n'a RIEN à voir avec le fait qu'il ne peut pas se connecter à un serveur de base de données. Il pourrait être très bien (bien que très peu probable) qu'une future version du langage ajoute des API pour accéder aux bases de données distantes.
Lucas Pottersky
3
Je n'appellerais pas cela "mélanger JS avec PHP", cependant. Ce que vous pouvez faire, c'est laisser le code PHP générer du code / des données JavaScript (json, par exemple) qu'il a récupéré à l'avance de MySQL. Ou vous pouvez utiliser PHP sur un serveur pour fournir une interface http (json / REST / SOAP / ... peu importe) pour accéder aux données que le code php récupère à partir de MySQL - et cette interface http peut être appelée par du code JavaScript s'exécutant n'importe où, principalement un brwoser. À partir d'aujourd'hui, il n'est plus courant de dire que JavaScript est côté client - vérifiez Node.js par exemple.
Henning le
14
"JavaScript est un langage côté client" Pas nécessairement: pas plus que Java.
LeeGee
2
avec la nouvelle version de mysql 5.7 httpclient peut communiquer directement avec la base de données mysql en utilisant le plugin http (construit pour mysql 5.7)
Atul Chaudhary
Ne serait-il pas en quelque sorte un risque de sécurité pour tous les navigateurs accédant à votre site d'avoir localement le fichier javascript qui accède directement à votre serveur MySQL?
Vassilis
85

Le JavaScript côté client ne peut pas accéder à MySQL sans une sorte de pont. Mais les déclarations en gras ci-dessus selon lesquelles JavaScript n'est qu'un langage côté client sont incorrectes - JavaScript peut s'exécuter côté client et côté serveur, comme avec Node.js.

Node.js peut accéder à MySQL via quelque chose comme https://github.com/sidorares/node-mysql2

Vous pouvez également développer quelque chose en utilisant Socket.IO

Vouliez-vous demander si une application JS côté client peut accéder à MySQL? Je ne sais pas si de telles bibliothèques existent, mais elles sont possibles.

EDIT : Depuis l'écriture, nous avons maintenant MySQL Cluster :

Le pilote JavaScript du cluster MySQL pour Node.js est exactement ce qu'il en est: c'est un connecteur qui peut être appelé directement à partir de votre code JavaScript pour lire et écrire vos données. Comme il accède directement aux nœuds de données, il n'y a pas de latence supplémentaire pour passer par un serveur MySQL et il est nécessaire de convertir des objets de code JavaScript // en opérations SQL. Si, pour une raison quelconque, vous préférez qu'il passe par un serveur MySQL (par exemple si vous stockez des tables dans InnoDB), cela peut être configuré.

LeeGee
la source
53

Si vous souhaitez vous connecter à une base de données MySQL en utilisant JavaScript, vous pouvez utiliser Node.js et une bibliothèque appelée mysql . Vous pouvez créer des requêtes et obtenir des résultats sous forme de tableau de registres. Si vous voulez l'essayer, vous pouvez utiliser mon générateur de projet pour créer un backend et choisir MySQL comme base de données à connecter. Ensuite, exposez simplement votre nouvel API REST ou point de terminaison GraphQL à votre front et commencez à travailler avec votre base de données MySQL.


ANCIENNE RÉPONSE GAUCHE PAR NOSTALGIE

PUIS

Si je comprends la question et me corrige si je me trompe, cela se réfère au modèle de serveur classique avec JavaScript uniquement côté client. Dans ce modèle classique, avec les serveurs LAMP (Linux, Apache, MySQL, PHP), la langue en contact avec la base de données était PHP, donc pour demander des données à la base de données, vous devez écrire des scripts PHP et faire écho aux données renvoyées au client. Fondamentalement, la répartition des langues selon les machines physiques était:

  1. Côté serveur: PHP et MySQL.
  2. Côté client: HTML / CSS et JavaScript.

Cela a répondu à un modèle MVC (modèle, vue, contrôleur) où nous avions les fonctionnalités suivantes:

  1. MODÈLE: Le modèle est ce qui traite les données, dans ce cas, les scripts PHP qui gèrent les variables ou qui accèdent aux données stockées, dans ce cas dans notre base de données MySQL et les envoient sous forme de données JSON au client.
  2. VUE: La vue est ce que nous voyons et elle doit être complètement indépendante du modèle. Il a juste besoin d'afficher les données contenues dans le modèle, mais il ne doit pas contenir de données pertinentes. Dans ce cas, la vue utilise HTML et CSS. HTML pour créer la structure de base de la vue et CSS pour donner la forme à cette structure de base.
  3. CONTRÔLEUR: Le contrôleur est l'interface entre notre modèle et notre vue. Dans ce cas, le langage utilisé est JavaScript et il prend les données que le modèle nous envoie sous forme de package JSON et les place dans les conteneurs qui offrent la structure HTML. La façon dont le contrôleur interagit avec le modèle consiste à utiliser AJAX . Nous utilisons les méthodes GET et POST pour appeler des scripts PHP côté serveur et pour récupérer les données renvoyées par le serveur.

Pour le contrôleur, nous avons des outils vraiment intéressants comme jQuery , en tant que bibliothèque "bas niveau" pour contrôler la structure HTML (DOM), puis de nouveaux outils plus haut niveau comme Knockout.js qui nous permettent de créer des observateurs qui connectent différents Les éléments DOM les mettent à jour lorsque des événements se produisent. Il existe également Angular.js de Google qui fonctionne de manière similaire, mais qui semble être un environnement complet. Pour vous aider à choisir parmi eux, voici deux excellentes analyses des deux outils: Knockout vs Angular.js et Knockout.js vs Angular.js . Je lis toujours. J'espère qu'ils vous aideront.

MAINTENANT

Dans les serveurs modernes basés sur Node.js, nous utilisons JavaScript pour tout. Node.js est un environnement JavaScript avec de nombreuses bibliothèques qui fonctionnent avec Google V8, moteur JavaScript Chrome. La façon dont nous travaillons avec ces nouveaux serveurs est:

  1. Node.js et Express : le mainframe sur lequel le serveur est construit. Nous pouvons créer un serveur avec quelques lignes de code ou même utiliser des bibliothèques comme Express pour rendre encore plus facile la création du serveur. Avec Node.js et Express, nous gérerons les pétitions au serveur des clients et y répondrons avec les pages appropriées.
  2. Jade : Pour créer les pages, nous utilisons un langage de création de modèles, dans ce cas, Jade, qui nous permet d'écrire des pages Web comme nous écrivions du HTML mais avec des différences (cela prend un peu de temps mais c'est facile à apprendre). Ensuite, dans le code du serveur pour répondre aux requêtes du client, il suffit de restituer le code Jade en un "vrai" code HTML.
  3. Stylet : similaire à Jade mais pour CSS. Dans ce cas, nous utilisons une fonction middleware pour convertir le fichier du stylet en un vrai fichier CSS pour notre page.

Ensuite, nous avons beaucoup de packages que nous pouvons installer à l'aide du NPM (gestionnaire de packages Node.js) et les utiliser directement dans notre serveur Node.js en le nécessitant juste (pour ceux d'entre vous qui veulent apprendre Node.js, essayez ce tutoriel pour débutants pour un aperçu). Et parmi ces packages, vous en avez certains pour accéder aux bases de données. Grâce à cela, vous pouvez utiliser JavaScript côté serveur pour accéder aux bases de données My SQL.

Mais le mieux que vous puissiez faire si vous comptez travailler avec Node.js est d'utiliser les nouvelles bases de données NoSQL comme MongoDB , basées sur des fichiers JSON. Au lieu de stocker des tables comme MySQL, il stocke les données dans des structures JSON, de sorte que vous pouvez placer des données différentes dans chaque structure comme de longs vecteurs numériques au lieu de créer d'énormes tables pour la taille de la plus grande.

J'espère que cette brève explication vous sera utile, et si vous voulez en savoir plus à ce sujet, voici quelques ressources que vous pouvez utiliser:

  • Egghead : Ce site regorge d'excellents tutoriels sur JavaScript et son environnement. Cela vaut la peine d'essayer. Et faites des remises de temps en temps.
  • Code School : avec un cours gratuit et très intéressant sur les outils de développement Chrome pour vous aider à tester le côté client.
  • Codecademy : avec des cours gratuits sur HTML, CSS, JavaScript, jQuery et PHP que vous pouvez suivre avec des exemples en ligne.
  • 10gen Education : avec tout ce que vous devez savoir sur MongoDB dans des tutoriels pour différentes langues.
  • W3Schools : Celui-ci a des tutoriels sur tout cela et vous pouvez l'utiliser comme lieu de référence car il contient de nombreux exemples de shortcode vraiment utiles.
  • Udacity : Un endroit avec des cours vidéo gratuits sur différents sujets avec quelques intéressants sur le développement Web et mon préféré, un cours WebGL incroyable pour les graphismes 3D avec JavaScript.

J'espère que cela vous aide à démarrer.

S'amuser!

Timbergus
la source
Belle réponse détaillée expliquant la mécanique.
Duane
Merci :) Je viens d'ajouter une mise à jour à la fin de la réponse pour résoudre le problème. Vous pouvez utiliser un serveur de nœuds avec une bibliothèque appelée "mysql", et j'ai ajouté un lien vers un générateur d'API que j'ai créé que vous pouvez utiliser pour démarrer un nouveau projet d'API. J'espère que ça aide.
Timbergus
Re "then": JavaScript utilisé côté serveur remonte à 1995, date à laquelle il était inclus dans Netscape Enterprise Server. Microsoft a mis "JScript" dans son serveur IIS peu de temps après. JavaScript sur le serveur n'est pas, à distance, nouveau.
TJ Crowder
Je pense que ce serait bien si cette réponse avait les dernières informations en haut ou supprimait simplement les anciennes informations obsolètes. C'est aussi un peu verbeux et se concentre sur des langues particulières. La réponse courte est que JavaScript peut être utilisé pour se connecter à une base de données MySQL directement à partir de Node.JS (ou d'un autre environnement d'exécution côté serveur) mais pas à partir du navigateur en raison de la sécurité délibérée du navigateur.
Caltor le
8

Je pense que vous auriez besoin d'ajouter quelque chose comme PHP dans l'équation. PHP pour interagir avec la base de données et ensuite vous pourriez faire des appels AJAX avec Javascript.

Kerry
la source
8

Un peu tard mais récemment, j'ai découvert que MySql 5.7 avait un plugin http via lequel l'utilisateur peut se connecter directement à mysql maintenant.

Recherchez le client HTTP pour mysql 5.7

Atul Chaudhary
la source
7

La réponse simple est: non.

JavaScript est un langage côté client qui s'exécute dans le navigateur ( nonobstant node.js ) et MySQL est une technologie côté serveur qui s'exécute sur le serveur.

Cela signifie que vous utilisez généralement un langage côté serveur comme ASP.NET ou PHP pour vous connecter à la base de données.

Dean Harding
la source
Javascript (sous forme de navigateur côté client) est utilisé chaque jour pour se connecter aux technologies côté serveur (Apache, Nginx, PHP, NodeJS, etc.) fonctionnant sur le serveur. La définition même de serveur / client exige que le «fossé» entre eux soit surmontable.
jeteon le
6

OUI? Jetez un œil à un météore. Liens:

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

Je ne comprends pas comment cela se fait. Mais Nettuts + a mis cette chose dans la section javascript-ajax, peut-être que la magie se produit.

Il montre également un moyen de se connecter et d'insérer à MongoDB avec JS, comme ceci:

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
la source
1
"Vous pouvez remplacer MongoDB par une autre base de données en fournissant un pilote de base de données côté serveur et / ou un cache côté client qui implémente une API alternative. Le mongo-livingata est un bon point de départ pour un tel projet." - docs.meteor.com
LeeGee
Meteor a été écrit en utilisant Node.js donc j'ai bien peur que cette réponse n'ajoute rien de nouveau ou ne change rien. Vous avez juste un cadre qui couvre le client et le serveur.
Caltor le
4

En fonction de votre environnement, vous pouvez utiliser Rhino pour ce faire, voir le site Web de Rhino . Cela vous donne accès à toutes les bibliothèques Java à partir de JavaScript.

Kusmeroglu
la source
4

Oui. Il existe un plugin HTTP pour MySQL.

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

Je suis juste en train de googler à ce sujet maintenant, ce qui m'a conduit à cette question de stackoverflow. Vous devriez pouvoir AJAX une base de données MySQL maintenant ou dans un proche avenir (ils prétendent qu'elle n'est pas prête pour la production).

Nick Manning
la source
2

En règle générale, vous avez besoin d'un langage de script côté serveur comme PHP pour vous connecter à MySQL, cependant, si vous ne faites qu'une maquette rapide, vous pouvez utiliser http://www.mysqljs.com pour vous connecter à MySQL à partir de Javascript en utilisant le code comme suit:

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

Il faut mentionner que ce n'est pas un moyen sécurisé d'accéder à MySql, et ne convient que pour les démos privées ou les scénarios où le code source n'est pas accessible par les utilisateurs finaux, comme dans les applications iOS Phonegap.

Fiach Reid
la source
Après une inspection rapide, cela constitue une menace pour le vol des informations d'identification de la base de données, comme le montre la ligne 6 de ce script qui indiquevar strSrc = "http://mysqljs.com/sql.aspx?";
Dragas
@Dragas - C'est vrai. javascript n'a pas de moyen natif de se connecter à une base de données mysql, donc la dll mysql est hébergée côté serveur, d'où l'appel AJAX. Cela signifie également que si vous utilisez un pare-feu sur le port 3306, vous devez l'ouvrir aux connexions entrantes de mysqljs.com
Fiach Reid
1

Oui, vous pouvez. Les connecteurs MySQL utilisent TCP pour la connexion, et dans JS, il existe une version légèrement modifiée du client TCP appelée Websocket. Mais vous ne pouvez pas vous connecter directement au serveur MySQL avec websocket. Vous aurez besoin d'un pont tiers entre websocket et mysql. Il reçoit une requête de websocket, l'envoie à mysql, le résultat de la réponse et le renvoie à JS.

Et voici mon exemple de pont écrit en C # avec la bibliothèque 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();
    }
}

Côté JS:

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

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

ws.send("select * from users");
Idée de génie
la source
0

Non.

Vous devez écrire un wrapper en PHP, puis exporter les données renvoyées (probablement sous Json). JAMAIS, obtenez de votre "_GET" le code SQL, car cela s'appelle une injection SQL (les personnes qui apprennent cela auront un contrôle total sur votre base de données).

Voici un exemple que j'ai écrit:

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

Renseignez-vous sur les injections SQL s'il vous plaît.

elcuco
la source
0

Vous pouvez vous connecter à MySQL depuis Javascript via une applet JAVA. L'applet JAVA intégrerait le pilote JDBC pour MySQL qui vous permettra de vous connecter à MySQL.

N'oubliez pas que si vous souhaitez vous connecter à un serveur MySQL distant (autre que celui à partir duquel vous avez téléchargé l'applet), vous devrez demander aux utilisateurs d'accorder des autorisations étendues à l'applet. Par défaut, l'applet ne peut se connecter qu'au serveur à partir duquel elle a été téléchargée.

Rajiv
la source
0

Si vous n'êtes pas verrouillé sur MySQL, vous pouvez passer à PostgreSQL. Il prend en charge les procédures JavaScript (PL / V8) à l'intérieur de la base de données. C'est très rapide et puissant. Consultez ce post .

ramigg
la source
0

JavaScript ne peut pas se connecter directement à DB pour obtenir les données nécessaires, mais vous pouvez utiliser AJAX. Pour faire une requête AJAX facile au serveur, vous pouvez utiliser le framework jQuery JS http://jquery.com . Voici un petit exemple

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
la source
1
où est la requête MySQL dans cet exemple?
Michael
@Michael: Excellente question.
Connor Gurney
-1

J'ai compris votre question, je pense que vous la confondez avec des langages comme dot.net et java où vous pouvez ouvrir une connexion DB dans votre code. Non, JavaScript ne peut pas se connecter directement à MySQL car JavaScript est un langage de script côté client (Exception Node.js). Vous avez besoin d'une couche intermédiaire comme l'API RESTful pour accéder aux données.

Sagittaire
la source
-3

Vous pouvez ajouter une connexion mysql en utilisant un fichier PHP. Voici l'exemple de fichier 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
la source
En fait, ce n'est pas une réponse. La question était Can JavaScript connect with MySQL?.
Alex.K.
C'est zéro pour cent pertinent par rapport à la question posée. L'auteur de la question a été très précis sur Javascript.
geekgugi