2015-01-16 3 views
2

나는 다음과 같은 코드가 있습니다PHP 변수는 MySQLi 문에서 작동하지

$indtag = ''; 
foreach($pretag as &$indtag) { //cycles through tags, puts quotes into check by tag 
    $quote = mysqli_query($mysqli, "SELECT `id`, `$indtag` FROM `beyonce` WHERE `$indtag` LIKE '%$indtag%'"); 
     while($row = mysqli_fetch_assoc($quote)) { 
      echo $row['$indtag']; 
      echo $row['id']; 
     } 
} 

표는 id의, quote의 각 태그에 대한 다음 각각의 열 (분노 ang 예를 인)에 대한 필드가 있습니다. pretag은 태그들로 가득 찬 배열입니다 (rom은 로맨스입니다, ang은 분노이고, dece은 속임수입니다). 나는 그 ID들과 태그들로 따옴표를 찾으려고 노력하고 있습니다. 이 문은 SQL에서 ang으로 실행하면 잘 동작하지만 변수를 사용하여 태그의 열/필드를 선택하려고하면 아무 것도 나타나지 않습니다. 어떤 아이디어?

SELECT `id`, `$indtag` FROM `beyonce` WHERE `$indtag` LIKE '%$indtag%' 
      ^       ^

과 같은 @tadman 포인트 아웃, 이런 식으로 할 준비된 문 mysqli_stmt_bind_param를 사용하지 않거나, : 당신이 열 이름 indtag를 이용해야하는 위치

+3

** 경고 ** : 당신은 매개 변수가있는 쿼리를 사용한다 mysqli''사용하는 경우 ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param. php)를 사용하여 쿼리에 사용자 데이터를 추가합니다. ** 심각한 [SQL injection bug] (http://bobby-tables.com/)를 만들므로 문자열 보간을 사용하여 **이를 수행하지 마십시오. 또한 잘 알려진 목록에 대해주의 깊게 스크리닝하지 않으면 동적 열 이름을 사용하여 무효화하십시오. – tadman

+0

'foreach ($ pretag as & $ indtag)'가 참조로 된 특별한 이유는 무엇입니까? –

+1

나는 실제로 당신이 비욘세라는 테이블을 가지고 있다는 것에 상당히 놀랐다. – castis

답변

2

당신은 변수 $indtag를 사용하는 너는 험악한 탈것에 든다.

+0

나는 선택된 컬럼이'indtag '가 아니라 실제로 동적으로 변화하고 있다고 확신한다. 이 질문을 바탕으로'$ indtag'의 값은 'ang', 'rom', 'dece'... 등이 될 수 있습니다. – BrokenBinary

+0

나는 특별히이 줄을 참조하고 있습니다 : _ 테이블에'id'를위한 필드가 있습니다. s,'quote's, ** 각 태그의 개별 컬럼 ** (분노에 대한'ang') ._ – BrokenBinary

+0

BrokenBinary는 이것에서 정확하다. 이것은 동적으로 변화하는 컬럼이다. –

0

코드에서이 줄은 따옴표가 필요하지 않습니다.

echo $row['$indtag']; // Won't work 
echo $row[$indtag]; // Will work