1

bash で mysql に文字列を挿入しようとするので、次のようにします。

message="<a href = http://www."
message="$message ${d}"
message="$message .com"
mysql -u root -pmypass -Bse 'INSERT INTO atTable VALUES (null, "'$message'")'

私がそれをすると、次のメッセージが表示されます。

mysql  Ver 14.14 Distrib 5.1.69, for debian-linux-gnu (i486) using readline 6.1
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --auto-rehash       Enable automatic rehashing. One doesn't need to use
                      'rehash' to get table and field completion, but startup
                      and reconnecting may take a longer time. Disable with
                      --disable-auto-rehash.
  -A, --no-auto-rehash
                      No automatic rehashing. One has to use 'rehash' to get
                      table and field completion. This gives a quicker start of
                      mysql and disables rehashing on reconnect.
  -B, --batch         Don't use history file. Disable interactive behavior.
                      (Enables --silent.)
  --character-sets-dir=name
                      Directory for character set files.

およびその他のコマンド。私は何を間違っていますか?

4

3 に答える 3

1

これを試してみてください:

message="<a href = http://www."
message="$message ${d}"
message="$message .com"
mysql -u root -pmypass -Bse "INSERT INTO atTable VALUES (null, '$message')";

少なくとも、これでテストしたところ、うまくいきました:

message="<a href = http://www."
message="$message hello"
message="$message .com"
mysql -u root -pwhatever -Bse "SELECT '$message'";
于 2013-06-10T16:26:43.843 に答える
0
  1. あなたのように変数をつなぎ合わせる代わりにmessage、これは読みやすいです:

    message="<a href = http://www. $d .com"
    

    これは元の投稿の例と同じですが、テキスト自体は意味がないように見えます。

  2. mysql次のようにクエリを渡すことができます。

    mysql -u root -pmypass -Bse  "INSERT INTO atTable VALUES (null, '$message')"
    
  3. 一重引用符が含まれている場合messageは、エスケープする必要があります。次のようにできます。

    message=$(echo "$message" | sed -e "s/'/\\\\'/")
    
  4. root パスワードをコマンド ラインに入力する代わりに、その情報を.my.cnfホーム ディレクトリのファイルに入力することをお勧めします。たとえば、次のようになります。

    [client]
    database=yourdbname
    user=root
    password=yourpass
    

    ただし、実際のパスワードを入力する に、まず次のようにファイルを保護します。

    touch .my.cnf
    chmod 600 .my.cnf
    
于 2013-06-10T19:10:53.993 に答える