2011-11-22 108 views
1

在mysql_query里连接文本和PHP变量的正确方法是什么?这里是我的尝试:PHP/mySQL:如何在mysql查询中连接一个变量?

page.'$pageID' 

我想要它输出page3

这里是所有的代码(简化为重点的mysql_query)的:

if ($_POST['pageProgress']) { 
     $pageProgress = $_POST['pageProgress']; 
     $pageID = 3; 
     $userID = 1; 
     $updateUserProgress = mysql_query("UPDATE test SET page.'$pageID'='$pageProgress' WHERE userID='$userID'") or die(mysql_error()); 
    } 

的代码

所有作品完美,如果我只是用 page3取代 page.'$pageID'

+4

请阅读关于SQL注入和PHP中的预处理语句。您即将为您的代码添加一个巨大的安全漏洞。 –

+0

@PhilippeGerber它将被消毒!谢谢! –

回答

8

你不需要.。 PHP解析双引号(")字符串并用它们的值替换这些变量。因此:

$pageID = 3; 
echo "UPDATE test SET page$pageID = '$pageProgress' WHERE userID = '$userID'"; 

http://codepad.viper-7.com/uIdqqH

+0

虽然'page“。$ pageID。”'确实有效,我更喜欢你的方法。我认为它更清洁,它的工作原理! –

+0

谢谢你的解决方案! –

+0

我也发现它比点运算符混乱得多。请记住,它只能使用双引号字符串,比如'“this”'而不是单引号字符串,比如''that''。 –

1

"UPDATE test SET page".$pageID."='".$pageProgress."' WHERE userID='".$userID."';"

点是在错误的地点与PHP的字符串函数来做到这一点。

+0

与我所做的和正确的一样。 :) – Luceos

+0

谢谢你的回答! –

0

尝试

mysql_query('UPDATE test SET page'.$pageID.'='.$pageProgress.' WHERE userID='.$userID) 
+0

我试过用单引号使用你的方法,但它不适合我。它虽然用双引号工作。我使用了Xeon06的解决方案:'page $ pageID'。尽管谢谢你的回答。 –

0
$updateUserProgress = mysql_query("UPDATE test SET page".$pageID." = '".$pageProgress."' WHERE userID='".$userID."'") or die(mysql_error()); 

@Marc B;这不是问题..

+1

正确!我喜欢你思考的方式。 – TelsaBoil

+0

这确实有用,但我更喜欢Xeon06的解决方案:'page $ pageID'。感谢您的解决方案! –

0

就像这样。

mysql_query("UPDATE test SET page" . $pageID . " = '" . $pageProgress . "' WHERE userID = " . $userID) 
+0

这确实有用,但我更喜欢Xeon06的解决方案:'page $ pageID'。感谢您的解决方案! –

1

问题是你的'$ pageID'是在双引号字符串中;你不要在MySQL端连接这个;在MySQL看到它之前它就会被解析。

这可能是您试图为Mysql转义字段名称,在这种情况下,您使用反引号。

尝试:

'UPDATE test SET `page'.$pageID.'`=\''.$pageProgress.'\' WHERE...' 

或者,对眼睛更容易:

"UPDATE test SET `page{$pageID}`='{$pageProgress}' WHERE..." 
+0

我还没有试过这个解决方案。我使用了Xeon06的解决方案:'page $ pageID'。我认为它有点干净。尽管谢谢你的回答! –

+0

如果它很有用,即使你接受至强的答案,也可以给它+1,这也很好。你应该习惯用反引号在MySQL中转义你的字段名称,并且还需要认真考虑@ Phillippe_Gerber关于转义变量的注释(请查看[mysql_real_escape_string()](http://www.google.com/ URL?SA = T&RCT = J&q =&ESRC = S&源=幅和CD = 1&VED = 0CCAQFjAA&URL = HTTP%3A%2F%2Fphp.net%2Fmanual%2Fen%2Ffunction.mysql实时的转义string.php&EI = qwDMTtbOA-Sg2AXSjKnIDw&USG = AFQjCNHeZ7lbY5LQwaxER94luYHu89AmpA) ) – Kato

+0

感谢您的额外评论。我明白使用'mysql_real_escape_string()',但是转义字段名称的目的是什么? –

0

你并不需要连接任何东西。你确实需要从后期清理你的变量。

if ($_POST['pageProgress']) { 
    $pageProgress = mysql_real_escape_string($_POST['pageProgress']); 
    $pageID = 3; 
    $userID = 1; 
    $updateUserProgress = mysql_query("UPDATE test SET page$pageID='$pageProgress' WHERE userID='$userID'") or die(mysql_error()); 
    } 
+0

谢谢你的回答!它将被消毒! –