Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator06 [2015/11/30 12:27]
Andrei Roșu-Cojocaru
laboratoare:laborator06 [2015/11/30 15:31] (current)
Andrei Roșu-Cojocaru
Line 1133: Line 1133:
   * ''​trace''​ - permite reținerea stivei de execuție în cadrul obiectelor ''​Error''​ care să includă apelul metodei din cadrul bibliotecii,​ cu deprecieri ale performanțelor pentru majoritatea apelurilor (implicit, ''​true''​);​   * ''​trace''​ - permite reținerea stivei de execuție în cadrul obiectelor ''​Error''​ care să includă apelul metodei din cadrul bibliotecii,​ cu deprecieri ale performanțelor pentru majoritatea apelurilor (implicit, ''​true''​);​
   * ''​multipleStatements''​ - stabilește comportamentul în privința utilizării mai multor expresii MySQL în cadrul aceleiași interogări,​ ceea ce ar putea reprezenta o breșă de securitate în privința atacurilor prin injecția de SQL malițios (implicit, ''​false''​);​   * ''​multipleStatements''​ - stabilește comportamentul în privința utilizării mai multor expresii MySQL în cadrul aceleiași interogări,​ ceea ce ar putea reprezenta o breșă de securitate în privința atacurilor prin injecția de SQL malițios (implicit, ''​false''​);​
-  * ''​flags''​ - stabilește o listă cu valori care vor controla comportamentul conexiunii;+  * ''​flags''​ - stabilește o listă cu valori care vor controla comportamentul conexiunii; aceștia sunt transmiși sub forma unui șir de caractere în care delimitatorul este caracterul '','';​ un flag care este adăugat în plus față de cele implicite trebuie prefixat de caracterul ''​+''​ iar în situația în care se dorește ca un flag implicit să fie șters, acesta trebuie prefixat de caracterul ''​-'';​ lista de flag-uri implicite este: 
 +    * ''​CONNECT_WITH_DB''​ - permite specificarea denumirii bazei de date în momentul în care este definită o conexiune;​ 
 +    * ''​FOUND_ROWS''​ - transmite atributul ''​found_rows''​ al argumentului ''​result''​ din cadrul metodei de tip callback transmisă prin metoda ''​query()'',​ în loc de ''​affected_rows'';​ 
 +    * ''​IGNORE_SPACE''​ - interpretorul SQL va ignora spațiile care preced caracterul ''​(''​ în cadrul interogărilor;​ 
 +    * ''​LOCAL_FILES''​ - permite încărcarea înregistrărilor într-o bază de date folosind ''​LOAD DATA LOCAL'';​ 
 +    * ''​LONG_FLAG'';​ 
 +    * ''​LONG_PASSWORD''​ - folosește o versiune îmbunătățită a mecanismului de autentificare;​ 
 +    * ''​MULTI_RESULTS''​ - semnalează posibilitatea de gestiune concurentă a mai multe seturi de rezultate;​ 
 +    * ''​PROTOCOL_41''​ - folosește versiunea 4.1 a protocolului de conectare la baza de date; 
 +    * ''​PS_MULTI_RESULTS''​ - semnalează posibilitatea de gestiune concurentă a mai multe seturi de rezultate;​ 
 +    * ''​SECURE_CONNECTION''​ - indică faptul că este suportată mecanismul de autentificare nativ din versiunea 4.1 a protocolului de conectare la baza de date; 
 +    * ''​TRANSACTIONS''​ - solicită utilizarea flag-urilor care indică starea tranzacției;​ 
 +    * ''​MULTI_STATEMENTS''​ - transmis în mod automat în situația în care parametrul ''​multipleStatements''​ are valoarea ''​true''​;
   * ''​ssl''​ - transmite un obiect care conține parametri SSL sau un șir de caracyere care conține denumirea unui profil SSL.   * ''​ssl''​ - transmite un obiect care conține parametri SSL sau un șir de caracyere care conține denumirea unui profil SSL.
  
Line 1168: Line 1180:
 connection.destroy();​ connection.destroy();​
 </​code>​ </​code>​
 +
 +În situația în care se dorește folosirea unui grup de conexiuni, se poate folosi metoda ''​createPool()''​ a obiectului ''​mysql''​ astfel încât numărul de conexiuni este specificat prin intermediul proprietății ''​connectionLimit''​. Obținerea unei conexiuni se face ulterior prin apelul metodei ''​getConnection()'',​ iar în momentul în care aceasta nu mai este necesară se poate apela metoda ''​release()''​. Un grup de conexiuni este terminat prin apelul metodei ''​end()''​.
  
 **Realizarea unei interogări** este realizată de regulă prin intermediul metodei ''​query()''​ apelată pe obiectul de tip ''​Connection'',​ care suportă următoarele forme: **Realizarea unei interogări** este realizată de regulă prin intermediul metodei ''​query()''​ apelată pe obiectul de tip ''​Connection'',​ care suportă următoarele forme:
Line 1173: Line 1187:
  
 <code javascript>​ <code javascript>​
-connection.statement('​SELECT * FROM book', function(error,​ result, fields) {+connection.query('​SELECT * FROM book', function(error,​ result, fields) {
   if (error) {   if (error) {
     console.log('​An error has occurred: %s', error);     console.log('​An error has occurred: %s', error);
Line 1211: Line 1225:
  
 <code javascript>​ <code javascript>​
-connection.statement('​SELECT * FROM book b WHERE b.id = ?', [bookId], function(error,​ result, fields) {+connection.query('​SELECT * FROM book b WHERE b.id = ?', [bookId], function(error,​ result, fields) {
   // ...   // ...
 }); });
Line 1224: Line 1238:
  
 <code javascript>​ <code javascript>​
-connection.statement({+connection.query({
   sql: '​SELECT * FROM books WHERE b.id = ?',   sql: '​SELECT * FROM books WHERE b.id = ?',
   values: [bookId],   values: [bookId],
Line 1238: Line 1252:
  
 <code javascript>​ <code javascript>​
-connection.statement({+connection.query({
   sql: '​SELECT * FROM books WHERE b.id = ?',   sql: '​SELECT * FROM books WHERE b.id = ?',
   nestTables: true,   nestTables: true,
Line 1245: Line 1259:
 }, [bookId], function (error, result, fields) { }, [bookId], function (error, result, fields) {
   // ...    // ... 
 +});
 +</​code>​
 +
 +În cazul interogărilor parametrizate,​ în situația în care pe post de parametrii se folosesc anumite câmpuri pentru care nu se aplică regulile de transformare obișnuite, se folosește șirul de caractere ''??''​. De asemenea, șirul de caractere poate fi pregătit local, înainte de a fi transmis către sistemul de gestiune pentru baze de date MySQL, prin intermediul metodei ''​format()'':​
 +
 +<code javascript>​
 +var unformatted_statement = '​SELECT * FROM ?? WHERE ?? = ?';
 +var parameters = ['​book',​ '​id',​ bookId];
 +var formatted_statement = mysql.format(unformatted_statement,​ parameters);​
 +// ...
 +</​code>​
 +
 +Pentru operațiile de **adăugare**,​ **modificare**,​ **ștergere**,​ se pot determina informații legate de identificatorul valorii care este adăugată, respectiv de numărul de înregistrări care au fost modificate / șterse, ca proprietăți ale obiectului ''​result''​ transmis ca parametru al funcției de tip callback în momentul în care este invocată metoda ''​query()'':​
 +  * ''​insertId''​ - stochează identificatorul înregistrării care a fost adăugată în baza de date în urma unei interogări de tip ''​INSERT''​ transmisă ca parametru al metodei ''​query()'':​ <code javascript>​
 +var book = {
 +  "​title":​ title,
 +  "​subtitle":​ subtitle,
 +  "​description":​ description,​
 +  "​edition":​ edition,
 +  "​printing_year":​ printing_year,​
 +  "​collection_id":​ collection_id
 +};
 +var query = connection.query('​INSERT INTO book SET ?', book, function(error,​ result) {
 +  if (error) {
 +    console.log('​An error has occurred: %s', error);
 +    return;
 +  }
 +  console.log('​The record has been successfully inserted with id %d', result.insertId);​
 +});
 +console.log(query.sql);​
 +</​code>​
 +  * ''​changedRows''​ - determină numărul de înregistrări care au fost modificate în urma unei interogări de tip ''​UPDATE''​ transmisă ca parametru al metodei ''​query()'':​ <code javascript>​
 +var query = connection.query('​UPDATE book SET edition = edition + 1 WHERE printing_year > ?', [printingYear],​ function(error,​ result) {
 +  if (error) {
 +    console.log('​An error has occurred: %s', error);
 +    return;
 +  }
 +  console.log('​%s records have been successfully updated',​ result.changedRows);​
 +});
 +</​code>​
 +  * ''​affectedRows''​ - determină numărul de înregistrări care au fost șterse în urma unei interogări de tip ''​DELETE''​ transmisă ca parametru al metodei ''​query()'':​ <code javascript>​
 +var query = connection.query('​DELETE FROM book WHERE collection_id IN ?', [collectionId],​ function(error,​ result) {
 +  if (error) {
 +    console.log('​An error has occurred: %s', error);
 +    return;
 +  }
 +  console.log('​%s records have been successfully deleted',​ result.affectedRows);​
 }); });
 </​code>​ </​code>​
Line 1302: Line 1363:
 </​code>​ </​code>​
       * se lansează în execuție serverul HTTP pe un anumit port: <code javascript>​       * se lansează în execuție serverul HTTP pe un anumit port: <code javascript>​
-app.lister(8080);+app.listen(8080);
 </​code>​ </​code>​
     * fișierul ''​package.json''​ - conține informații cu privire la aplicația web (denumire, versiune, cuvinte-cheie,​ autor precum și modulele folosite, descrise sub formă de dependențe - pentru fiecare atribut se indică denumirea și versiunea care se dorește a fi utilizată) <file json package.json>​     * fișierul ''​package.json''​ - conține informații cu privire la aplicația web (denumire, versiune, cuvinte-cheie,​ autor precum și modulele folosite, descrise sub formă de dependențe - pentru fiecare atribut se indică denumirea și versiunea care se dorește a fi utilizată) <file json package.json>​
laboratoare/laborator06.1448879225.txt.gz · Last modified: 2015/11/30 12:27 by Andrei Roșu-Cojocaru
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0