web-dev-qa-db-fra.com

JavaScript peut-il se connecter avec MySQL?

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

96

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

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

23
konradowy

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 est 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 pourriez aussi développer quelque chose en utilisant Socket.IO

Voulez-vous dire si une application JS côté client peut accéder à MySQL? Je ne suis pas sûr que de telles bibliothèques existent, mais elles sont possibles.

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

Le pilote JavaScript de MySQL Cluster pour Node.js est exactement ce à quoi il ressemble - 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’ya pas de temps de latence supplémentaire pour passer par un serveur MySQL et il est nécessaire de convertir le code JavaScript // objets en opérations SQL. Si, pour une raison quelconque, vous préférez que cela passe par un serveur MySQL (par exemple, si vous stockez des tables dans InnoDB), vous pouvez le configurer.

74
LeeGee

PUIS

Si je comprends la question et me corrige si je me trompe, cela fait référence au modèle de serveur classique avec JavaScript uniquement du côté client. Dans ce modèle classique, avec les serveurs LAMP (Linux, Apache, MySQL, PHP), le langage en contact avec la base de données est PHP. Pour demander des données à la base de données, vous devez écrire des scripts PHP et echo les données renvoyées au client. En gros, la distribution des langues en fonction des machines physiques est la suivante:

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

Cela répond à un modèle MVC (Modèle, Vue, Contrôleur) où nous avons les fonctionnalités suivantes:

  1. MODEL: C'est le modèle qui traite les données, dans ce cas, les scripts PHP qui gèrent les variables ou les données d'accès stockées, dans ce cas dans notre base de données MySQL et les envoyant sous forme de données JSON au client.
  2. VIEW: La vue est ce que nous voyons et elle devrait être complètement indépendante du modèle. Il suffit de montrer les données contenues dans le modèle, mais il ne devrait pas y avoir 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. CONTROLLER: Le contrôleur est l'interface entre notre modèle et notre vue. Dans ce cas, le langage utilisé est JavaScript et utilise 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 manière dont le contrôleur interagit avec le modèle utilise AJAX. Nous utilisons les méthodes GET et POST pour appeler des scripts PHP côté serveur et récupérer les données renvoyées à partir du serveur.

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

À PRÉSENT

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 fonctionnant avec le moteur JavaScript de Google V8, Chrome. Notre façon de travailler avec ces nouveaux serveurs est la suivante:

  1. Node.js et Express : Le cadre principal dans lequel le serveur est créé. Nous pouvons créer un serveur avec quelques lignes de code ou même utiliser des bibliothèques comme Express pour rendre la création du serveur encore plus facile. Avec Node.js et Express, nous allons gérer les requêtes adressées au serveur à partir des clients et leur répondre avec les pages appropriées.
  2. Jade : Pour créer les pages, nous utilisons un langage de gabarit, en l'occurrence Jade, qui nous permet d'écrire des pages Web en écrivant du HTML mais avec des différences (cela prend un peu de temps mais est facile à apprendre). Ensuite, dans le code du serveur pour répondre aux requêtes des clients, il suffit de convertir le code Jade en "vrai" code HTML.
  3. Stylus : Similaire à Jade mais pour les CSS. Dans ce cas, nous utilisons une fonction middleware pour convertir le fichier de stylet en un fichier css réel pour notre page.

Ensuite, nous avons beaucoup de paquets que nous pouvons installer à l’aide du NPM (gestionnaire de paquets Node.js) et les utiliser directement sur notre serveur Node.js qui en a juste besoin (pour ceux qui qui veulent apprendre Node.js, essayez ceci tutoriel débutant 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 allez travailler avec Node.js est d'utiliser les nouvelles bases de données NoSQL telles que MONGODB, basées sur des fichiers JSON. Au lieu de stocker des tables telles que MySQL, il stocke les données dans des structures JSON. Vous pouvez donc insérer différentes données dans chaque structure, telles que 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 souhaitez en savoir plus à ce sujet, voici quelques ressources que vous pouvez utiliser:

  • EGGHEAD: Ce site regorge d'excellents tutoriels courts sur JavaScript et son environnement. Ça vaut le coup d'essayer. Et les faire des réductions 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 contient des tutoriels sur tout cela et vous pouvez l'utiliser comme référence, car il contient de nombreux exemples de code très utiles.
  • UDACITY: un site proposant des cours vidéo gratuits sur différents sujets, dont un intéressant sur le développement Web et mon préféré, un cours WebGL exceptionnel pour les graphiques 3D avec JavaScript.
  • METTRE À JOUR!.

Actuellement, avec un serveur de nœud, si vous souhaitez communiquer avec une base de données MySQL, vous pouvez utiliser une bibliothèque appelée MYSQL. Vous pouvez créer des requêtes comme vous l'avez fait avec PHP, et vous pouvez l'essayer avec un GÉNÉRATEUR D'API que j'ai créé, que vous pouvez télécharger avec NPM. Il a un assistant qui vous permet de choisir les bases de données que vous voulez utiliser, entre autres choses.

J'espère que cela vous aide à commencer.

S'amuser!.

Have fun!

51
Timbergus

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 vous pourrez ensuite faire des appels AJAX avec Javascript.

8
Kerry

Peu de temps en retard, mais récemment, j'ai découvert que MySql 5.7 avait un plugin http permettant à l'utilisateur de se connecter directement à mysql maintenant.

Recherchez le client http pour mysql 5.7

7
Atul Chaudhary

La réponse simple est: non.

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

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

7
Dean Harding

OUI? Regardez 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 c'est fait. Mais Nettuts + a mis cette chose dans la section javascript-ajax, peut-être que la magie opère.

Il montre également un moyen de se connecter et d’insérer dans 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});
6
Ivan Wang

Oui. Il existe un plugin HTTP pour MySQL. 

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

Je suis en train de googler à ce sujet maintenant, ce qui m'a amené à cette question de stackoverflow. Vous devriez pouvoir AJAX créer une base de données MySQL maintenant ou dans un avenir rapproché (ils prétendent que ce n'est pas prêt pour la production).

4
Nick Manning

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

4
Kusmeroglu

Vous pouvez envoyer des requêtes AJAX à certains wrappers RESTful côté serveur pour MySQL, tels que DBSlayer , PhpRestSQL ou AlsoSQL (pour Drizzle , un fork de MySQL ).

1
niutech

En règle générale, vous avez besoin d’un langage de script côté serveur tel que PHP pour vous connecter à MySQL. Toutefois, si vous effectuez une maquette rapide, vous pouvez utiliser http://www.mysqljs.com to connectez-vous à MySQL à partir de Javascript en utilisant le code suivant:

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

Il convient de noter qu'il ne s'agit pas d'un moyen sécurisé d'accéder à MySql, mais que cela ne convient que pour des démos privées ou des scénarios dans lesquels le code source n'est pas accessible aux utilisateurs finaux, comme dans les applications Phonegap iOS.

0
Fiach Reid

Oui, vous pouvez. Les connecteurs MySQL utilisent TCP pour la connexion. Dans JS, il existe une petite version 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 de tierce partie 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");
0
Brain Storm

JavaScript ne peut pas se connecter directement à la base de données pour obtenir les données nécessaires, mais vous pouvez utiliser AJAX. Pour faciliter la demande AJAX au serveur, vous pouvez utiliser jQuery JS framework 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(); 
$out['first']   = 'first value';
$out['second']   = 'second value';
echo json_encode($out);
0
Octan

Vous pouvez vous connecter à MySQL à partir de 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 sur lequel vous avez téléchargé l'applet), vous devrez demander aux utilisateurs d'accorder des autorisations étendues à l'applet. Par défaut, l'applet peut uniquement se connecter au serveur à partir duquel il est téléchargé. 

0
Rajiv

Si vous n'êtes pas bloqué sur MySQL, vous pouvez passer à PostgreSQL. Il supporte les procédures JavaScript (PL/V8) dans la base de données. C'est très rapide et puissant. Commander ce post .

0
ramigg

Non.

Vous devez écrire un wrapper en PHP, puis exporter les données renvoyées (probablement en Json). NE JAMAIS, obtenez de votre "_GET" le code SQL, car cela s’appelle une injection SQL (les personnes qui apprendront ceci auront le contrôle total de 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; 
}

En savoir plus sur les injections SQL s'il vous plaît.

0
elcuco