2014-10-07 2 views
0

이 질문은 약간 기본 사항이며 여러 번 다루어졌지만 왜 코드가 아무 것도하지 않는 이유가 확실하지 않습니다. 그것은 문자열을 전혀 업데이트하지 않습니다. PHP에서 문자열을 대체 하시겠습니까?

내 코드입니다 :

$fineImage = "users_fav/".$_GET['id']."/$newname"; 


$icon = "<img src='images/icon.png' height='70' width='70' />"; 

$sql = "UPDATE $lchat SET user_message = replace(user_message, '$icon', '$fineImage')"; 
$query = mysqli_query($db_conx, $sql); 

문제는 그 내가 'david', 'mark' 같은에 '$icon', '$fineImage'를 변경하는 경우. 그것은 잘 작동하고 그것은 마크로 데이비드를 대체 할 것입니다 ...!

그렇다면 왜 그런 식으로 작동하지 않습니까?

+4

당신이 사용자 데이터를 추가 ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php) 매개 변수화 된 쿼리를 사용한다 mysqli''사용 당신의 질문. ** 심각한 [SQL injection bug] (http://bobby-tables.com/)를 만들므로 문자열 보간을 사용하여 **이를 수행하지 마십시오. 문자열 연결을 사용하기 때문에 여기에 어떤 종류의 인용 문제가있을 수 있습니다. – tadman

+0

@ tadman, 더 자세히 설명해주십시오. – user3806613

+0

@tadman, 나는 그 자신을 생각했다. +1을 가리키고있다. – user3806613

답변

2

그것은 MySQL을의 REPLACE(input, before, after)에 전화가 inputbefore을 찾기 위해 실패 가능성, 그래서 수정되지 않은 input을 반환합니다.

왜 이럴 수 있습니까? 몇 가지 이유 :

  1. user_message 여기에 그 내용이 포함되어 있지 않습니다. 예를 들어, <> 태그는 인 타이틀 티드 (즉, &lt; 등으로 코딩되어 있습니까?)입니까?
  2. <img..> 태그를 $ fine_image로 바꿉니다. $fineimage<img ...> 태그입니까?
  3. before 매개 변수에 작은 따옴표가 포함되어 있습니다. SQL 문자열을 유효하지 않게 만들 수 있습니다.
0

이 시도 : -

$sql = "UPDATE {$lchat} SET `user_message` = replace(`user_message`, '{$icon}', '{$fineImage}')"; 

당신이 $ lchat, $ 아이콘, $ fineImage가 정의되어 있는지 확인합니다. :)

관련 문제