2013-06-22 4 views
2

로 바로 넘어갑니다. PHP를 사용하여 값으로 변수를 사용하는 경우 데이터베이스에서 레코드를 삭제하는 데 문제가 있습니다. 아래 코드 줄은 완벽하게 작동합니다.Mysqli DELETE가 변수와 함께 작동하지 않습니다.

그러나 사용자 이름이 변경 될 수 있으므로 변수로 선언해야합니다. 모든 종류의 변형을 시도했지만 아무 것도 작동하지 않는 것 같습니다. 최근 실패한 시도는 아래 코드와 같았습니다. 삽입 할 때 변수를 선언하는 방법입니다. 그렇지 않으면 원하는 결과로 이어질하지 않을 수 있습니다,

mysqli_query($con,"DELETE FROM highScores WHERE Name='".$name."'"); 

$namestring(5) David 같은 적절한 형성 문자열이 있는지 확인하거나 완전히 귀하의 요청을 깰 수

mysqli_query($con,"DELETE FROM highScores WHERE Name='{$name}'"); 
+0

중괄호없이 시도 했습니까? 그게 효과가있다. "mysqli_query ($ con,"이름이 '$ name'인 highScores에서 삭제); " 그러나 이상하게도 SQL 쿼리에서 사용하는 변수를 'sanitize'해야합니다. 특히 공용 사용자 입력에서 오는 경우 – MrVimes

+0

쿼리에서 오류가 반환됩니까? –

+0

$ name 값은 무엇입니까? – DBuTbKa

답변

3

이와 같은 상황에서는 변수에 실제로 예상되는 내용이 포함되어 있는지 확인하는 것이 좋습니다. 그리고 전체 쿼리 문자열을 반향하는 것이 왜 쿼리가 작동하지 않는지 알아내는 좋은 방법입니다.

$sqlquery = "DELETE FROM highScores WHERE Name='{$name}'"; 

// have a look at the query... 

echo "<pre>$sqlquery</pre>"; 

// use it... 

mysqli_query($conn,$sqlquery); 
나는 $ 이름은 공개적으로 볼 수있는 HTML 형태로, 어딘가 신뢰에서 오는 경우, 다음 쿼리에서 사용하기 전에 '안전'할 필요가 있음을 경고한다

. 'prepared statements'을 살펴보십시오. 코드에서 변수를 올바르게 채우고 있는지 확인한 후에는 변수를 쿼리에 넣기 전에 해당 변수가 안전한지 확인하십시오.

0

가 실행 얻을이보십시오. 당신은 내가 .. {$ 변수가} 쿼리에서 유효 있는지 확실하지 않습니다 쿼리

+0

PHP에서는 변수를 삽입하기 위해 문자열을 중단 할 필요가 없으며 Name = '$ name'을 수행 할 수 있습니다. 그러면 작동합니다. – MrVimes

+1

알아,하지만 어쨌든 코드를 어기면 코드를 더 잘 보여줍니다! – Bjoern

+0

'ok'라고 말하고 싶지만 stackoverflow가 내 의견을 짧게 허용하지 않습니다. D – MrVimes

0

을 실행하기 전에이

$name = mysqli_real_escape_string($con,$name); 

같은 mysqli_real_escape_string를 넣어 경우이 확신 할 수 있습니다.

변수에 검색어를 삽입하는 방법을 집중이라고합니다.

mysqli_query($con,"DELETE FROM highScores WHERE Name='" . $name . "'"); 

마침표는 2 개의 문자열을 함께 추가합니다.

그러나 SQL 인젝션에 취약합니다. 내가 너라면, $ name 안에있을 수있는 것에 신중할거야.

편집 : 실수, 나는 나를 위해 따옴표를 삽입하는 클래스에 익숙해.

+0

{$ variable}이 (가) 완벽하게 유효하며 이름이 작은 따옴표가 필요하므로 제안이 좋지 않음 – KyleK

+0

이것은 쿼리가 아니라 PHP 문자열입니다. –

+0

이 기록에 대해서는 비슷한 문제를 디버깅하는 동안 체크 아웃했습니다. 이런 식으로하는 것이 모범 사례라면, 나도 몰라,하지만 확실히 작동합니다. – Vector

0

동일한 문제에 대한 해결책을 찾고있는 중 여기에 왔지만 데이터베이스 사용자에게 삭제 권한이 없음을 발견했습니다. 보안상의 이유로이 권한을 이전에 제거 했었습니다.

관련 문제