2012-01-27 4 views
3

URL 배열을 증가시키지 않고 테이블을 업데이트하려고하면 테이블에 인쇄되는 것은 URL 배열의 마지막 항목 일뿐입니다.foreach()를 사용하여 MySQL 테이블 업데이트

내가 $url을 울리는 경우 제대로 배열을 통해 반복 할 수 있습니다. 내가 에코 할 때 $currentId은 제대로 증가합니다. 쿼리가 내 테이블의 각 행에 각 $url을 입력하지 않는 이유는 무엇입니까? 여기서 무슨 일이 일어나고 있는지 모르겠다.

$currentId = 1; 
foreach($pages as $url) 
{ 
    $query = "UPDATE pageurls SET url='$url' WHERE id='currentId'"; 
    mysql_query($query); 
    echo($url.'<br/>'); 
    $currentId++; 
} 

답변

5

당신은 문자열을 비교하는 : WHERE id='currentId'

변수 WHERE id='$currentId'

2

currentId가 아닌 문자열 변수로 사용되는이어야한다.

또한, 당신이 문자열 "currentId"를 일치하는 ID를 검색하는 ... mysql_real_escape_string()

+2

를, 그것은 MySQL의 특수 문자가 제대로 처리되는 것으로 간주 무엇인지 확실하게 대한 것입니다. 가질 수있는 큰 습관입니다. –

+0

@Topener : 시스템이 누군가에 의해 프로그래밍되어야하므로, 여전히 "사용자"입력입니다 (특히 주니어 코더를 사용하는 경우). 그럼에도 불구하고 a) 맹목적으로 모든 것을 문자열로 변환하는 것보다 올바른 유형 (예 :'(int) $ currentId') 또는 b) 매개 변수화 된 쿼리를 사용하는 것이 더 안전 할 것입니다. – Piskvor

10

대신

$query = "UPDATE pageurls SET url='$url' WHERE id='currentId'"; 

으로 그 값을 탈출 확인해야합니다, 시도 ... 당신은 자신에 의해 currentId를 생성하고 있기 때문에

$query = "UPDATE pageurls SET url='".mysql_real_escape_string($url). 
     "' WHERE id=".$currentId; 

, 그것은 안전,하지만 당신은 정말 mysql_re를 사용하여 $ URL을 탈출한다 al_escape_string.

편집 : @Topener가 지적했듯이, 나는 $ currentId 이전에 $를 놓친 것을 수정했습니다.

$query = "UPDATE pageurls SET url='$url' WHERE id='currentId'"; 

내가 같이 변경합니다 : :이 라인에서 오류가

+0

여전히 잘못되면 오류가 발생합니다.내 대답을보십시오 –

+0

@Topener 사실, 매뉴얼 상태; "이 함수는 (거의 예외없이) MySQL에 질의를 보내기 전에 항상 데이터를 안전하게 유지해야합니다.", 직접 작성한 문자열에도 " '"문자가 포함될 수 있습니다. –

+0

@Topener : 여전히 오류가 발생하지 않습니다. 만약 당신이 작은 따옴표를 생략했다는 것을 언급한다면,'id'라는 이름의 칼럼이 주어진 스키마에서 10이되는 숫자가 9 번이고, 이것은 지원된다. OP에서이 줄로 : $ currentId = 1'. – FtDRbwLXw6

0

제대로 변수를 탈출하고 있는지 조회에 사용되는 확인

$query = "UPDATE pageurls SET url='".$url."' WHERE id=".$currentId; 
0

은 (처럼 보이는 @Louis에 따르면 id/$currentId에 대해서는 intval()이고 사용자 입력이나 외부 소스에서 나온 경우 mysql_real_escape_string()url입니다. 그런 다음이를 쿼리로 보간하고 실제로 정수인 경우 $currentId을 인용하지 않습니다.

$currentId = 1; 

foreach($pages as $url) { 

    $query = "UPDATE pageurls SET url = '{$url}' WHERE id = {$currentId}"; 

    mysql_query($query); 

    echo($url . '<br/>'); 

    $currentId++; 

} 
// foreach 
-1

변수 대신 문자열을 사용하고 있습니다!

이 검색어는 아주 유용한 정보입니다. 많은 행을 업데이트하면 많은 자원을 필요로합니다.

가 살펴 유무 : 그것은 사용자 입력에 대해 정말 아니다 " Update Multiple Rows With Different Values and a Single SQL Query"

+0

왜 내가 echo가 올바른 것을 인쇄하는지 알아 내려고 노력하고 있기 때문에 단지 21 개의 행이 있습니다. (따라서 변수는 매번 루프를 통해 올바른 값을 얻습니다.)하지만 mysql 테이블은 url의 마지막 값만 21 번 인쇄합니다. – user1155445

관련 문제