1

複数の変数に基づいてvarcharに巨大なデータブロックを割り当てる更新を実行しようとしています。これが私のSQLコードのサンプルです:

   'update details set full = "Miles reported by $name - $empname - $deptname\n\n"
 "Total Miles in $month: $dailytotal\n"
 "Total Business Miles in $month: $busitotal\n"
 "Total Personal Miles in $month: $perstotal\n\n"
  "$month 1: START: $start1...STOP: $stop1...DAILY: $daily1...BUSINESS: $busi1...PERSONAL: $personal1\n"
  "$month 2: START: $start2...STOP: $stop2...DAILY: $daily2...BUSINESS: $busi2...PERSONAL: $personal2\n"
  ')
    or die "Could not prepare sql statement";

これは正常に機能しますが、問題は変数を'$ name'として格納することであり、$nameが他のすべての変数と同じであるということではありません。どうすればこれを修正でき、フォーマットについて申し訳ありません。前もって感謝します!

4

2 に答える 2

1

正解はすでに示されていますが、qq()関数を使用して変数を簡単に補間できることを付け加えたいと思います。区切り文字を変更できるため、長い文字列でも簡単に使用できます。これはあなたがそれをする方法です:

qq(update details set full = "Miles reported by $name - $empname - $deptname\n\n"
"Total Miles in $month: $dailytotal\n"
"Total Business Miles in $month: $busitotal\n"
"Total Personal Miles in $month: $perstotal\n\n"
"$month 1: START: $start1...STOP: $stop1...DAILY: $daily1...BUSINESS: $busi1...PERSONAL: $personal1\n"
"$month 2: START: $start2...STOP: $stop2...DAILY: $daily2...BUSINESS: $busi2...PERSONAL: $personal2\n");

区切り文字を変更すると言うとき、次のような文字列がある場合に便利です。

foo(bar)

次に、たとえば、次のコマンドを使用qq//して、親をエスケープする必要がないようにすることができます。

qq/foo(bar)/
于 2012-12-03T20:01:29.500 に答える
0

文字列を一重引用符で囲んでいるため、変数やその他のエスケープシーケンスは期待どおりに解釈されません。こちらのPHPドキュメントを参照してください。

http://php.net/manual/en/language.types.string.php

また、あなたの場合、挿入するフィールド全体を一重引用符で囲む必要があります。コードを読みやすくし、行が希望どおりに返されるようにするには、変数に文字列値を設定し、その変数を次のようにクエリで使用することを強くお勧めします。

$insert_string = "Miles reported by $name - $empname - $deptname\n\n".
"Total Miles in $month: $dailytotal\n".
"Total Business Miles in $month: $busitotal\n".
"Total Personal Miles in $month: $perstotal\n\n".
"$month 1: START: $start1...STOP: $stop1...DAILY: $daily1...BUSINESS: $busi1...PERSONAL: $personal1\n".
"$month 2: START: $start2...STOP: $stop2...DAILY: $daily2...BUSINESS: $busi2...PERSONAL: $personal2\n";
$query = "UPDATE details SET full = '$insert_string'";

また、クエリがテーブル内のすべてのレコードのこの文字列にUPDATE値を設定するわけではありません。fullこれが意図されているかどうかはわかりません(これは月固有のレコードのように見えるので、そうではないと思います)。WHERE単一のレコードまたはレコードのサブセットのみを更新する場合は、クエリに句が必要です。

于 2012-12-03T19:45:37.497 に答える