2014-03-03 3 views
5

나는 현재 내가PDO 준비된 문 문제

$sql = mysql_query("UPDATE `table` SET quantity=quantity+1 WHERE id='$id'"); 

내가 드릴 수 없습니다 MySQL의 쿼리 예제이 보여 드리죠 ... MySQL의 테이블 컬럼의 현재 값이 1에 의해 자체를 증가하는 쿼리를 실행하려고 PDO 준비된 성명서에서 이것을하십시오 ...

$sql = "UPDATE `table` SET quantity=:quants+1 WHERE id=:userid"; 
$sql_prep = $db->prepare($sql); 
$sql_prep->bindParam(":quants", what will i write here??); 
$sql_prep->bindParam(":userid", $id); 
$sql_prep->execute(); 

도움이 필요합니다! 감사합니다

당신은 매개 변수로 되었 할 필요가 없습니다

답변

3

, 그냥 수행

$sql = "UPDATE `table` SET quantity=quantity+1 WHERE id=:userid"; 
$sql_prep = $db->prepare($sql); 
$sql_prep->bindParam(":userid", $id); 
$sql_prep->execute(); 
+0

무엇에 대해 sql_injection? 이 쿼리는 SQL 삽입을 방지합니까? – nick

+1

삽입하지 않으면 쿼리에 전달하는 유일한 매개 변수는 userid입니다. 수량은 데이터베이스 내부입니다. –

+0

데이터베이스 내부에서 데이터를 조 변경하거나 조작 할 때 일반적으로 SQL 삽입에 대해 걱정할 필요가 없습니다. MySQL 데이터베이스는 이미 원시 데이터를 처리하고 있으며이를 처리하는 방법에 대해 코칭 할 필요가 없습니다. 이 규칙의 예외는 저장 프로 시저 내에서 SQL 쿼리 *를 작성할 때입니다. – tadman

0

당신은 그냥 DB에 이미 값을 보강하고 같은 quantity을 보호 할 필요가 없습니다.

$sql = "UPDATE `table` SET quantity=quantity+1 WHERE id=:userid"; 

은 또한 데이터를 보호하기위한 쿼리를 통해 DB에 외부에서 삽입되고있는 :quants

$sql_prep = $db->prepare($sql); 

// NOT NEEEDED --> $sql_prep->bindParam(":quants", what will i write here??); 

$sql_prep->bindParam(":userid", $id); 
$sql_prep->execute(); 

준비된 문에 대해 바인드 라인을 드롭 할 수 있습니다.