Получение конкретного значения из mySQL
Добрый день. Прошу сильно не пинать...
Имеется следующий код: var mysql = require('mysql'); var connection = mysql.createConnection({ host : '127.0.0.1', user : 'root', password : 'password', database : 'maindb' }); connection.connect(); console.log('connection complete'); connection.query('SELECT * FROM users', function(error, results){ if (error) throw error; console.log(results); }); //console.log(query); connection.end(); Результатом выполнения данной команды является: Код:
connection complete Если выполнить вывод console.log(results.name);, то в консоль возвращается: Код:
connection complete В чем подвох и где можно почитать на эту тему? PS. Я новичок, постигаю все эти вещи в свободное от работы время. |
Так, как я понял, RowDataPacket является объектом...
|
Неактуально,
console.log(results[0].name); Оказывается, я был близок)) |
угу, а сделать запрос SELECT name FROM users;
Если надо только name? |
Цитата:
|
угу, но какой объект, засоряется и память и замедляется работа бд, конечно в данном случае это не критично, но если глобально, то это если надо килограмм яблок, ты берешь и капусту и огурцы и еще всякой фигни, а надо было только яблоки ), не верно просить из базы все, а потом фильтровать, базой это все надо делать.
|
Lion777, спасибо, я это понимаю :)
Решил более не засорять тему и пару дней промучался сам. Как сделать видимым результат запроса за пределами функции? Имеем следующий код: var mysql = require('mysql'); var connection = mysql.createConnection({ host : '127.0.0.1', user : 'root', password : 'ПАРОЛЬ', database : 'maindb' }); connection.connect(); console.log('Connection complete!'); var querySelectUser = 'SELECT * FROM users'; res = 'Пока пусто'; var query = connection.query(querySelectUser, function foo(error, results){ if (error) throw error; //console.log(results[0].name); res = results[0].name; console.log(res + ' - Это из функции'); return res; }); console.log(query.res + ' - Это должно быть '); connection.end(); Каким образом лучше организовать 22 строку? Возвращает undefined, хоть ты тресни... |
Вот и ещё один человек открыл для себя асинхронность. Годы текут, ничего не меняется...
Sebastian Pereiro, "foo" - это функция-коллбэк, она будет вызвана только когда получит результат от базы, т.е. хрензнает когда, может быть спустя годы, если коннект к базе по радиоканалу с луны. К тому времени 22 строка уже давно выполнится своим чередом. Еслиб скрипт ждал результата, то он всё это время бы висел и ни на что не реагировал, а это какбэ противоречит самой сути современного js - асинхронности всего и вся. Для начала дели свой код на функции и вызывай оные последовательно. P.S. В самом современном js для таких случаев ныне применяют promise и async\await, но без понимания базы это всё равно бесполезно, т.к. лишь удобная надстройка над всё той же сутью. |
Цитата:
|
Пример? Вот пример:
var mysql = require('mysql'); function makeRequest(){ var connection = mysql.createConnection({ host : '127.0.0.1', user : 'root', password : 'ПАРОЛЬ', database : 'maindb' }); connection.connect(); console.log('Connection complete!'); var querySelectUser = 'SELECT * FROM users'; var query = connection.query(querySelectUser, function foo(error, results){ if (error) throw error; //console.log(results[0].name); var res = results[0].name; console.log(res + ' - Это из функции'); workWithResult(res); connection.end(); }); } function workWithResult(result){ console.log(result + ' - Это должно быть '); } Если вопрос "как писать код тупо подряд?", ответ - никак. Потому что сами запросы выполняются не подряд, асинхронно. Асинки могут сделать чтоб выглядело примерно подряд, но всё равно потребуются функции-обёртки и промисы. И как я сказал выше, без понимания базы js их трогать вам не надо, зря читали, лучше бы начальный учебник по слову асинхронность открыли. |
Часовой пояс GMT +3, время: 09:27. |