2011-11-22 309 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

謝謝你的回答!它將被消毒! –