2013-05-20 2 views
0

CRUD 페이지를 생성 중입니다. 나는 다음과 같은 코드로, 내 데이터베이스에 데이터를 삽입 할 수있었습니다 :PHP CRUD 'where 절'에서 알 수없는 열

$query="INSERT INTO user(USER_ID, PASSWORD, FIRST_NAME, LAST_NAME, CONTACT_NO, SHIPPING_ADDRESS, BILLING_ADDRESS, EMAIL) VALUES('$user_id', '$password', '$first_name', '$last_name', '$contact_no', '$shipping_address', '$billing_address', '$email')"; 
if(mysqli_query($con, $query)) 
{ 
echo "<center><font color=#FF0000>Record Inserted!</font></center><br>"; 
} 
else{printf("error: %s\n", mysqli_error($con));} 
    } 
} 

그러나, 나는 삭제하거나 오류가 나타납니다 " '조항이 곳을'알 수없는 열"로 데이터를 편집 할 수 없습니다입니다. 나는 구글에서 솔루션을 찾는 시도했지만 그들은 작동하지 않았다. 내 코드에 오류가 있는지 누군가가 알 수 있습니까?

다음 코드

데이터베이스에 editting에 데이터를 위치 :

$query="UPDATE user SET USER_ID='$user_id' , PASSWORD='$password', FIRST_NAME='$first_name', LAST_NAME='$last_name', CONTACT_NO='$contact_no', SHIPPING_ADDRESS='$shipping_address', BILLING_ADDRESS='$billing_address', EMAIL='$email' WHERE USER_ID=".$_POST['user_id']; 
if(mysqli_query($con, $query)) 
{ 
    echo "<center><font color=#FF0000>Record Updated!</font></center><br>"; 
} 
else{printf("error: %s\n", mysqli_error($con));} 
} 

다음 코드는 데이터베이스에서 데이터를 삭제하기위한 것입니다 : 모든

if(isset($_GET['operation'])){ 
    if($_GET['operation']=="delete") 
    { 
     $query="DELETE FROM user WHERE USER_ID=".$_GET['user_id']; 
     if(mysqli_query($con, $query)) 
     { 
      echo "<center><font color=#FF0000>Record Deleted!</font></center><br>"; 
     } 
     else{printf("error: %s\n", mysqli_error($con));} 
    } 
} 
+1

문제가 무엇인지 어떻게 알 수 있습니까? 오류 메시지는 아주 분명합니다 ... 지정한 열 이름이 없습니다. 왜 안 그래? 너 자신과 다른 것을 아는 사람. 또한, 당신이하고있는 일은 대단히 불안합니다. 당신은 ** SQL injection 공격에 ** 활짝 열려 ** 당신은 이미 해킹 당했을 것입니다 **. 이 문제를 완전히 피하기 위해 PDO 또는 유사하게 준비/매개 변수화 된 쿼리를 사용하는 방법을 배웁니다. – Brad

+0

WHERE 조건을 기반으로 USER_ID를 업데이트하는 이유는 무엇입니까? 이드를 바꾸고 있니? – shapeshifter

+1

누군가가'1; truncate table user;를 USER_ID로 게시합니다. http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php/60496#60496 – Orangepill

답변

3

나는 당신의 user_id coulmn 유형이 varchar 추측으로 교체 귀하의 쿼리 문자열은 UPDATE ... WHERE user_id=id1; 다음과 같은 결과를 throw합니다 MySQL은 id1 열 및 thro 가정 ws unknown column. 이렇게 코드에 인용 부호를 사용하는 것이 더 좋습니다. UPDATE ... WHERE user_id='".$_POST['user_id']."'

1

첫째,이 업데이트 방법입니다 당신이 사용하는 데이터가 mysqli

$stmt = $mysqli->prepare("UPDATE name SET firstname = ?, 
    lastname= ?, 
    WHERE id = ?"); 

$stmt->bind_param('id', 
    $_POST['firstname'], 
    $_POST['lastname']); 
$stmt->execute(); 
$stmt->close(); 

방법, mysqli 쿼리 즉 더 나은 성능과 보안을 위해 빌드해야합니다.

문제는 당신은 당신의 쿼리를 시작 여기에 라인 WHERE USER_ID=".$_POST['user_id'];

을 보인다 그래서, 더 나은 당신이 지금까지 코드가 (위의 문제에서 asside가) 간다, 이제 mysqli

에 대해 무엇을 알고 다시는 배우기 "UPDATE user SET USER_ID='$user_id',으로 변경하고 따라서 " 두 개로 시작하면 끝내야하며 마지막에 ; 세미콜론을 포함하면 견적 시퀀스를 유지 관리해야합니다.

그래서, 그래서 WHERE USER_ID='.$_POST['user_id'].'";

에 마지막으로 코드를 변경 우리를 잎, 그래서, 그것은

"UPDATE user SET USER_ID='$user_id' , PASSWORD='$password', FIRST_NAME='$first_name', LAST_NAME='$last_name', CONTACT_NO='$contact_no', SHIPPING_ADDRESS='$shipping_address', BILLING_ADDRESS='$billing_address', EMAIL='$email' WHERE USER_ID=".$_POST['user_id']; 

"UPDATE user SET USER_ID='$user_id' , PASSWORD='$password', FIRST_NAME='$first_name', LAST_NAME='$last_name', CONTACT_NO='$contact_no', SHIPPING_ADDRESS='$shipping_address', BILLING_ADDRESS='$billing_address', EMAIL='$email' WHERE USER_ID='.$_POST['user_id'].'"; 
+0

-1 보안에 구멍이 뚫린 경우. – Brad

+0

@Brad it 's'mysqli' 나는 mysql 만 이스케이프해야한다고 생각했습니다. – samayo

+0

그게 네가 믿는 것이라면, 아마 그 대답을 완전히 삭제하고 그 주제를 읽어야 할 것이다. 쿼리를 수동으로 만들 때 쿼리를 구성하는 방법에 대한 데이터베이스 계층의 영향은 무엇입니까? mysqli/mysql/PDO ... 데이터를 쿼리에 연결하면 상관 없다. 명령에서 데이터를 근본적으로 분리하여 SQL 주입을 피하기 위해 준비된 쿼리를 사용해야합니다. – Brad

관련 문제