2013-08-30 3 views
1

사용자가 제품 목록을 검색하고 수량이 미리 입력 된 텍스트 상자가있는 페이지에이 목록을 표시합니다. 사용자는이 양을 변경할 수 있으며 양식은이 데이터를 업데이트 페이지로 전송합니다. 나는 .. 데이터베이스 업데이트를 수행하려면 다음 문을 사용하고MySQL은 0으로 값을 업데이트하지 않습니다.

$sql = "UPDATE reservations SET quantity=? WHERE tableID= ?"; 

이 사용자가 텍스트 상자에 0을두고 다음 업데이트가 바로이 값을 생략하는 경우를 제외하고 모든 값에 대해 완벽하게 작동하고 기존에 그것을 잎 하나. 데이터베이스에 직접 들어가서 아무런 문제없이 값을 수동으로 0으로 변경할 수 있지만 웹 기반의 진술로 보인다. INT로 설정되었고 VARCHAR도 시도했지만 어느 행운도 없었습니다. SQL 문이 0 값을 무시하게 만드는 원인은 무엇입니까?

if ($quantity) $stmt->execute(array($quantity, $id)); 

0이 false로 평가 때문에 문을 건너 뛰고이 경우 $quantity가 0 인 경우 명령을 실행

전체 업데이트 코드가

$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 
$conn = new PDO($dsn, $username, $password, $opt); 
$sql = "UPDATE reservations SET quantity=? WHERE tableID= ?"; 
$stmt = $conn->prepare($sql); 
foreach($_POST["Quantity"] as $id => $quantity) { 
    if ($quantity) $stmt->execute(array($quantity, $id)); 
} 
+1

이 쿼리에 매개 변수를 삽입하는 방법을 보여주십시오. – Itay

+0

값에 백틱이나 따옴표를 사용하고 있습니까? 정수 인 경우에는 필요가 없습니다. – Sablefoste

+0

또한 테이블의 스키마를 제공합니다. 즉, 'desc reservations' –

답변

6

인 문제는 바로 여기에 있습니다.

왜이 if 문을 사용했는지 모르겠지만 $quantity || $quantity==="0"으로 바꾸어야합니다.

+1

'$ quantity'는 아마 문자열 일 것이므로'=== "0"'을 확인하십시오. –

+0

@SalmanA : 뛰어난 지적. 편집 됨. – user1618143

+0

그는'if (is_numeric ($ quantity))'를 할 수도 있습니다. – ub3rst4r

관련 문제