2014-04-08 5 views
1

작동하지 않는 코드가 있습니다. 양식을 사용하여 값 (녹색, 파란색, 빨간색 등)을 게시하고 해당 게시물 값을 변수 이름의 일부로 사용하여 데이터베이스에서 무언가를 조회합니다.가변 변수가 작동하지 않습니다.

$mine = 'green'; 

$querymine = $dbcon->prepare('SELECT * FROM mine WHERE playerid = :playerid'); 
$querymine->execute(array(
    'playerid' => $playerid 
)); 
$rowmine = $querymine->fetch(PDO::FETCH_ASSOC); 

if (${'rowmine[\'has'.$mine.'\']'} == 0) { 
    header("location:mine.php"); 
    die(); 
} 

"hasgreen"열을 조회합니다.이 경우 INT 4입니다. 문제는, 그것은 $ rowmine [ 'hasgreen']이 NULL이라는 것을 말해 주므로 "mine.php"로 되돌아갑니다. 나는 문제가 무엇인지 모르겠다. 어쩌면 variablename에서 \ '를 사용 했을까?

답변

3

. 변수 변수를 사용할 이유가 없습니다.
대신 $rowmine['has'.$mine]을 간단하게 사용할 수 있습니다!

초보자 일 수도 있으므로 가변 변수를 사용하는 경우 항상을 사용해야합니다. 변수 변수는 읽을 수없는 스파게티 코드를 얻는 가장 좋은 방법입니다.

+0

감사합니다. 작동합니다! 나는 초보자이며 인터넷 검색과 실험을 통해 PHP를 배우려고 노력하고 있습니다. – s1h4d0w

+0

* 매우 *주의하십시오. PHP 자습서 등을 검색 할 때 ** CRAP ** (예, 대담한 대문자 사용)이라는 놀라운 양이 있습니다. 특히 최근이 아닌 경우. 솔직하게 말해서, 이것은 PHP가 아닌 파이썬을 배우기 위해 항상 누군가를 추천하는 이유 (언어 외에도 훨씬 더 좋은 이유) 중 하나입니다. 어쨌든, 준비된 진술로 올바른 방법으로 SQL을 수행하는 가상 +1! – ThiefMaster

+0

감사합니다. 나는 가능한 한 안전하고 SQL injection에 대한 적절한 보호를 즉시 사용하려고 노력합니다. 나는 보안을 구현하는 정확한 방법을 연구하고 아무도 내 코드 나 데이터베이스를 망칠 수 없는지 확인하기 위해 많은 시간을 보냅니다. 내가해야 할 일은 내 코드를 주석 달기뿐입니다 :) – s1h4d0w

1

{} 필요 없음,이 시도 : 당신은 배열이

if ($rowmine['has'.$mine] == 0) 
관련 문제