2012-12-03 47 views
1

我想运行一个更新,它基于多个变量分配一个varchar数据块。这里有一个例子我的SQL代码:更新mysql和设置信息块

'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是连同所有其他变量相同。我怎样才能解决这个问题,并对我的格式感到抱歉。提前致谢!

回答

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查询将为表中的每个记录设置的值为此字符串。我不知道这是否是有意的(我猜这不是因为这似乎是一个月特定的记录)。如果您只想更新单个记录或记录子集,则需要在查询中使用WHERE子句。

+0

谢谢你,这真的帮助我,我也欣赏额外的文件。 – BluGeni

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//到避免必须逃离parens:

qq/foo(bar)/