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 回答