• ベストアンサー

シェルの変数をMySQLに送る方法が分かりません

おはようございます。 前回、MySQLのデータをシェルの変数に入れるという件で質問しましたが、 今度は逆にシェルの変数をMySQLのクエリに送りたいのですが、括弧で 括ってみたり、'や"で括ってみたりしたのですがどうにも上手く行きません。 そのようなことはできないのでしょうか? やりたいことはシェルで保持している変数をMySQLのレコードに登録です。 ご存知の方、是非方法を御教授下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.1

↓のような事? ○テーブルの確認(mysqlコマンド) mysql> desc test.test; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | num | int(10) | | PRI | 0 | | | text | varchar(255) | | | | | +-------+--------------+------+-----+---------+-------+ 2 rows in set (0.01 sec) ○空のテーブル mysql> select * from test.test; Empty set (0.00 sec) ○シェルスクリプトの実行(テーブルtest.testへのINSERT) alfheim# cat mysql.sh #!/bin/sh NUM=0 TEXT="TEST" echo "INSERT INTO test.test (num ,text) VALUES ('$NUM', '$TEXT');" | mysql -u root -ppassword #./mysql.sh ○テーブルへの追加確認(mysqlコマンド) mysql> select * from test.test; +-----+------+ | num | text | +-----+------+ | 0 | TEST | +-----+------+ 1 row in set (0.00 sec)

sollalice
質問者

お礼

御教授いただいた方法で上手く処理できました。 この処理が上手く出来ずにずっと止まっていましたが、 やっと先に進めます。 ありがとうございました。

sollalice
質問者

補足

Lean様 処理として、 1.アカウント予約テーブルからデータを読み込み、シェルスクリプトの変数にセットする。 2.読み込んだ変数をもとにLinuxのユーザアカウントを作成する。 3.ユーザアカウント存在ユーザ名テーブルにユーザ名を書き込む。 4.アカウント予約テーブルから登録したユーザを削除する。 今3で詰まっているのでまさしくこれです。 これが解決できれば(シェルスクリプトの変数を使ってMySQLのクエリを発行できれば) 4も多分解決できると思います。 早速やってみます。

関連するQ&A

  • MySQLのデータをシェルの変数に入れる方法

    お世話になります。 ユーザ名とパスワードを入力させるフォームをPHPで作成し、 MySQLのSpoolに書き込むものを作りました。 やりたいことはシェルスクリプト(bash)を用いて、Spoolの データをシェルの変数に入れ、その変数を基にLinuxのユーザを 作成しようと思っています。 以下シェルスクリプトでMySQLのデータを表示することは出来たのですが、 echo 'use test;select * from spool'|mysql -u root -ppassword 表示したデータを変数に入れることが出来ません。 $test='use test;select * from spool'|mysql -u root -ppassword echo $test どのようにしたら上手くできるでしょうか? 皆様のテクニックを御教授下さい。 環境 OS-CentOS4.4 MySQL-4.1.20

  • シェルスクリプトの変数について

    表題の件について質問させていただきます。 シェルスクリプト内であるプログラムを走らせて No is 2 という標準出力が得られたとします。 そのなかの2という文字を変数につめたいのですがなかなかうまくいきません。 良い方法をご存知の方ご教授よろしくお願いします。

  • PHPとMySQLで配列で検索する方法

    プログラミング初心者です。 PHPとMySQLでデータベースを作成しています。 配列に格納したデータを既に登録してあるデータに参照して、日付と題名が同じものは登録しないようにしたいと思います。 以下がソースなのですが、2行目でエラーがでてしまいます。そうすればよいかご教授お願いします。 for($j=1; $j<$i; $j++){ $query ="select * from data where date=" . $date2[$j]; $result = mysql_query($query) or die(mysql_error()); $query2 ="select * from data where sub=" . $sub[$j]; $result2 = mysql_query($query2) or die(mysql_error()); if(mysql_num_rows($result) != 0 && mysql_num_rows($result2) != 0){ //登録しない } else{      //データベースに登録

    • 締切済み
    • PHP
  • mysqlで変数を使う方法

    SQL文にPHPの変数のように変動する値を指定することはできますでしょうか。 データベースから特定のレコードを拾ってきて PHPのPOSTメソッドでその値を送信するシステムを作ろうとしています。 具体的には、データベースに名簿(IDと名前だけの簡単なものです)を 予め作っておき、送信ボタンをクリックしたユーザーのIDと紐付いている 名前を送信したいと考えています。 [MySQL] table:meibo id | name ------------ 1 | itou 2 | yamada 3 | suzuki [PHPソース](一部抜粋) ------------ $sql = mysql_query('SELECT * FROM meibo where id=【ここを変動させたい】', $connect); $sql = mysql_fetch_array($sql); $req->addPostData("user_name", $sql['name']); ------------ $idに操作しているユーザーのIDが代入されているとして 以下のようにmysql_queryの中で実行しているSELECT文に$idを利用することは可能でしょうか。 SELECT * FROM meibo where id=$id もし上記のような方法が無理な場合、 代替案をご提案いただけると非常に助かります。 読みにくい文章で恐縮ですが、 どうかお助けください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLのINSERT文で変数展開ができません

    はじめまして。 MySQL+PHP初心者なのですが、INSERT文中での変数展開がうまくいきません。 フォームから受け取ったデータを単純にレコードに追加するだけなのですが、 mysql_query('insert into area_tbl (area)values($area)'); areaのデータ型はテキストで、$areaをクォーテーションで囲めば当然のごとくそのまま表示されてしまいますし、事前に $area = $_POST['area'] の処理をしてもダメです。直後に echo "$area" をするとフォームに入力した文字列が表示されるので、データの受け渡しはうまくいっていると思います。また ($area) の代わりに'あいうえお'といれると【あいうえお】とデータベースに反映されるので、MySQLとPHPの日本語対応の問題もないと思います。なぜでしょうか? ご指導のほどよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPの変数を使ったMYSQL条件検索について

    PHP初心者です。どなたか詳しい方ご教示下さい。かれこれ半日調べてもわかりません。 フォームに入力したキーワードを使って条件検索を行い、MYSQLに登録した必要なレコードを取り出す作業を行いたいのですが「Unknown column 'henkan' in 'where clause'」と出て表示されません。 カラムの方がINT型なら表示されるのですが、TXT型なら上記エラーが出ます。 色々調べたらインジェクション対策(?)で「'」と「”」の入れ方が悪く、「`」を変数の前後に入れれば良いかと思い試してみましたが「Parse error: syntax error, unexpected~」と出てエラーが出ます。 他にも色々「'」「"」の位置を変更して見ましたがエラーが出ます。どなたか詳しい方、お教え下さい。 よろしくお願い致します。 ・PHPプログラム <?php mysql_connect('localhost','root','') or die(mysql_error()); mysql_select_db('mydb'); mysql_query('SET NAMES UTF8'); $recordSet = mysql_query('SELECT * FROM manyu where syurui ='.$_POST['free']); $data = mysql_fetch_assoc($recordSet) or die(mysql_error()); echo $data['keyword']; ?> ・テーブルとカラム id syurui keyword ___ _________ __________ 6 henkan 変換 →「変換」と出てくる予定でした。

  • PHPからMySQLにアクセスする方法について、

    PHPからMySQLにアクセスする方法について、 自分のとっている方法が正しいか分かりません。 現在、以下のような状態です <<< index.phpの中身(概要) >>> (1)DBのコネクト    mysql_connect("localhost", "mysql_user", "mysql_password");    mysql_select_db("mydb"); (2)DBへのアクセス    $result=mysql_query("SELECT id, name FROM mytable");    $row=mysql_fetch_array($result, MYSQL_NUM); (3)クエリーのクローズ    mysql_free_result($result); (4)exit; 公式サイトのサンプルをそのまま流用したような形なのですが、 これだとindex.phpが呼び出されるたびにDBをコネクトし直します。 現在、数万レコード単位のテーブルの読み込みが頻発するシステムを開発しています。 取得したいデータの容量自体は大きなものではなく、SELECT文も高速に動作するように WHERE文等気を使っていますが、後々のことを考えると心配になりました。 できればページが飛んでもDBの接続が保持されるようにしたいのですが 可能なのでしょうか。 また、それによってアクセスの高速化は望めるのでしょうか。 ご存知の方、お手数ですがご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 変数内のデータをmysqlのデータベースへ書き込むサンプルなのですが、うまくinsertされません。

     回答者様たちのおかげで、mysqlをVC++から呼び出すことはできるようになりました。ありがとうございます。  ネットで拾ってきたサンプルを修正し、変数内のデータをtotalというテーブルに書き込んでいくプログラムを書いてみました。  しかし既存のテーブル内のデータは読み込み、表示はできるのですが、書き込みがうまくいきません。  以下、私が書いたソースです。 #include <cstdlib> #include <iostream> #include "windows.h" #include "mysql.h" MYSQL *mysql; MYSQL_RES *results; MYSQL_ROW record; static char *server_options[] = { "mysql_test", "--defaults-file=my.cnf" }; int num_elements = sizeof(server_options)/ sizeof(char *); static char *server_groups[] = { "libmysqld_server", "libmysqld_client" }; //メイン int main(int argc, char **argv) { //mysql_server_init(num_elements, server_options, server_groups); mysql = mysql_init(NULL); //mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client"); //mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL); char query[256]; int year = 2007; int manth = 2; int day = 2; int hour = 12; int min = 33; int group = 1; int man = 1; char name[] = "紙コップ"; int num = 1; int tanka = 900; int cre = 1; int check; memset(query, '\0', 256); mysql_real_connect(mysql, NULL,"root","パスワード", "rest", 0,NULL,0); if(mysql_errno(mysql) != 0) { fprintf(stderr, "Error: %s\n", mysql_error(mysql)); system("PAUSE"); return 0; } mysql_query(mysql, "SELECT * FROM total"); if(mysql_errno(mysql) != 0) { fprintf(stderr, "Error: %s\n", mysql_error(mysql)); system("PAUSE"); return 0; } results = mysql_store_result(mysql); if(results == NULL || mysql_errno(mysql) != 0) { fprintf(stderr, "Error: %s\n", mysql_error(mysql)); system("PAUSE"); return 0; } /* MYSQL_FIELD *fd; for(int i = 0; fd = mysql_fetch_field(results); i++) { printf("%d %s \n", i, fd->name); } while((record = mysql_fetch_row(results))) { printf("%s %s\n", record[0], record[1]); printf("%s, %s, %s \n", record[2], record[3], record[4]); } */ sprintf(query, "insert into total values (%d, %d, %d, %d, %d, %d, %d, %s, %d, %d, %d)",year, manth, day, hour, min, group, man, name, num, tanka, cre); mysql_query(mysql, query); mysql_free_result(results); mysql_close(mysql); mysql_server_end(); system("PAUSE"); return 1; } データベース名はrest  テーブル名はtotal です。 /**/でかこってある部分は、拾ってきたサンプルで、コメントを外し、 すでにデータが入っているテーブルを指定してやれば、 指定したテーブルのデータを引っ張ってくるので、VC++とmysqlが繋がっていないということはないと思います。 totalのフィールドの数も、書き込みたい変数の数と一致しています。 totalの各フィールドのタイプは、変数nameの紙コップを書き込みたいやつだけVARCHAR型でそれ以外はINT型です。 検索並び替え等はまだ考えてないのでKEY指定はしておりません。 ご指導よろしくお願いいたします。

  • 変数の中身をデータベースに登録

    Accessで変数の中身をテーブルに登録する方法は以下のとおりで可能だと思いますが、 ​http://oshiete.nikkeibp.co.jp/kotaeru.php3?q=2360461​ この場合、変数(この場合、TEXT1等)の中身に半角括弧"("が入るとクエリーエラーとなってしまいます。 どなたか解決法をご教授ください

  • mysqlテーブルから一つレコードを取得して変数に

    mysqlテーブルから一つレコードを取得して変数に はじめまして。仕事上必要で独学で勉強を始めましたが、行き詰ってしまったので教えてください。 mysql+phpにて以下のテーブル(tbl_ex)で、phpから、'test'のレコードを足がかりに、idの'001'を返して変数に代入する方法がわかりません。 tbl_ex +-------+-----------+ | id | account | +-------+-----------+ | 001 | test | +-------+-----------+ | 002 | sample | +-------+-----------+ accountのtestからidを抜き出すのに SELECT id FROM tbl_ex WHERE account = 'test'; という具合にやったのですが、それからどうidを変数にするのかわからず、 元から違っていて別の方法があるのかと疑問です。 結果、$id='001' というようにしたいです。 凡庸な質問なのかもしれませんが、ご教授お願い致します。

    • ベストアンサー
    • PHP