Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

bash - SQL Query Outputs to variable

Im new in bash scripting. I want to save sql-query outputs in variable, but

actually I must connect for every query to mysql with:

mysql -u $MYUSER -p$MYPASS -D database

and want to save every output in seperatly variable

sample query is: SELECT domain FROM domains WHERE user='$USER'

to

$variable1 = FIRST_OUTPUT
$variable2 = 2ND_OUTPUT

thank you

like image 582
mostworld77 Avatar asked Jul 21 '13 16:07

mostworld77


2 Answers

Taken from bash script - select from database into variable, you can read the query result into a variable.

Example

mysql> SELECT * FROM domains;
+-------+---------+
| user  | domain  |
+-------+---------+
| user1 | domain1 |
| user2 | domain2 |
| user3 | domain3 |
+-------+---------+

Usage

$ myvar=$(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")
$ echo $myvar
domain1 domain2 domain3

echo is the bash command for output. You can then split $myvar into separate variables:

$ read var1 var2 var3 <<< $myvar
$ echo $var1
domain1
$ echo $var2
domain2

You can combine these two commands into a single one:

read var1 var2 var3 <<< $(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")

It is possible to store the results into arrays (useful if you don't know how many records there):

$ read -ra vars <<< $(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")
$ for i in "${vars[@]}"; do
$     echo $i
$ done
domain1
domain2
domain3
like image 113
Yang Avatar answered Sep 20 '22 17:09

Yang


Another way of doing is:

dbquery=`mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains"`      
dbquery_array=( $( for i in $dbquery ; do echo $i ; done ) )

The first line stores all the output from the query in a varriable dbquery in a array-like-way. The second line converts the dbquery into an array dbquery_array with a simple for loop.

like image 30
3kstc Avatar answered Sep 20 '22 17:09

3kstc