2011-11-22 3 views
1

mysql_query에서 PHP의 텍스트와 변수를 연결하는 적절한 방법은 무엇입니까? 내가 출력 page3에 원하는PHP/mySQL : mysql 쿼리에서 변수를 연결하는 방법은 무엇입니까?

page.'$pageID' 

: 여기 내 시도이다.

여기합니다 (상 mysql_query에 초점 간체) 모든 코드입니다 : 나는 단순히 page3page.'$pageID'를 교체 할 경우

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()); 
    } 

모든 코드의 완벽하게 작동합니다.

+4

PHP에서 SQL 주입 및 준비된 문에 대해 읽어보십시오. 코드에 막대한 보안 취약점을 추가하려고합니다. –

+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의 필드 이름을 이스케이프하려는 경우가있을 수 있습니다.이 경우 backticks를 사용합니다.

시도 : 눈에

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

또는 훨씬 쉽게 :

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

아직이 솔루션을 시도하지 않았습니다. 나는 Xeon06의 해결책 인'page $ pageID'로 갔다. 나는 그것이 조금 더 깨끗하다고 ​​생각한다. 그래도 고마워. –

+0

유용하다면 Xeon의 답변을 수락해도 +1 할 수 있습니다. MySQL에서 백틱으로 필드 이름을 이스케이프하는 습관을 들여야하며 @ Phillippe_Gerber가 변수를 이스케이프 처리하는 것에 대해 진지하게 고려해야합니다 ([mysql_real_escape_string()] (http://www.google.com/ url? sa = t & rct = j & q = & esrc = s & source = web & cd = 1 & ved = 0CCAQFjAA & url = http % 3A % 2F % 2Fphp.net % 2Fmanual % 2Fen % 2Ffunction.mysql- 실제 이스케이프 문자열 .php & qiDMTtbOA-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

답변 해 주셔서 감사합니다. 그것은 위생 ​​처리 될 것이다! –

관련 문제