2009-04-16 3 views
0

다음 조건 코드를 사용하여 적절한 사용자 이름이없는 레코드가 있으면 새 레코드를 삽입하고 존재하는 경우 레코드를 업데이트합니다. 이것은 잘 작동합니다.sql - 기존 정보를 무시하지 않고 업데이트

그러나 지금은 새 레코드를 삽입하고 이름과 성을 삽입하고 전화 정보가 비어있는 상태로 세부 정보를 입력하면 괜찮습니다. 그런 다음 전화 레코드로 레코드를 업데이트하려는 경우 이름과 주소 정보가 대체되지 않습니다.

내가 알고 싶은 것은 정보를 업데이트하기 위해 PHP 웹 양식을 채울 수있는 쉬운 방법이 있는지, 업데이트 할 필드의 내용이 맞는지 여부입니다. I는 다시 아래 PHP 코드를 전달하는 자바 스크립트 함수에 전달 된 사용자의 입력을 얻기

<input type="text" name="uniquename" /> 

를 사용하고있다. 이것이 가능하지 않다면 비어 있지 않은 userinput에 해당하는 필드 만 업데이트하기 위해 일부 SQL/PHP 마술을 사용하는 쉬운 방법이 있습니까?

$usernameQuery = "select username from USERS where username = '" . $con->escape_string($username) . "'"; 

$xblah = $con->query($usernameQuery); 
    while ($row = mysqli_fetch_assoc($xblah)) 
    { 
    $checkUsername = $row['username']; 
    } 

if ($checkUsername == null) { 

$userQuery = "INSERT INTO USERS VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 
if ($userInfo = $con->prepare($userQuery)) { 
    $userInfo->bind_param("ssssssssssssssssssss", $username, $firstname, $lastname, $flaggedauctions, $lastauction, $street1, $city1, $postcode1, $street2, $city2, $postcode2, $phone, $mobilephone, $fax, $email, $website, $bank, $banknumber, $accountnumber, $comments); 
    $userInfo->execute(); 
    $userInfo->close(); 
    echo "true"; 
} else { 
echo "false"; 
} 
print_r($con->error); 
} 

else if ($checkUsername == $username) { 

$userQuery = "UPDATE USERS SET firstname = ?, lastname = ?, flaggedauctions = ?, lastauction = ?, street1 = ?, city1 = ?, postcode1 = ?, street2 = ?, city2 = ?, postcode2 = ?, phone = ?, mobilephone = ?, fax = ?, email = ?, website = ?, bank = ?, banknumber = ?, accoutnumber = ? WHERE username = ?"; 
if ($userInfo = $con->prepare($userQuery)) { 
    $userInfo->bind_param("sssssssssssssssssss", $firstname, $lastname, $flaggedauctions, $lastauction, $street1, $city1, $postcode1, $street2, $city2, $postcode2, $phone, $mobilephone, $fax, $email, $website, $bank, $banknumber, $accountnumber, $username); 
    $userInfo->execute(); 
    $userInfo->close(); 
    echo "true"; 
} else { 
echo "false"; 
} 
print_r($con->error); 
} 

답변

1

업데이트 구문을 작성하고 매개 변수를 동적으로 바인딩해야합니다. 예 :

$userQuery = "UPDATE "; 

if (!empty($firstname)) { 
    $userQuery += "firstname = ?,"; 
} 

...  

if (!empty($firstname)) { 
    $bindArgs[] = $firstname; 
} 
... 

그래서 변경하지 않아야하는 열은 쿼리에서 업데이트되지 않습니다. 더 일반적으로

+0

흠, 감사 INTO를 교체합니다. bindArgs는 어떻게됩니까? –

+0

내 PHP 기술은 약간 녹슬었지만 $ bindArgs를 bind_param 함수에 전달할 수 있다고 생각합니다. PHP에서 배열을 가변 숫자 인수로 전달할 수 있다고 생각합니다. – oscarkuo

+0

그래서 두 개의 개별 솔루션입니까? 각 변수에 대해 bindARgs를 사용할 수 있습니까? –

0

, 그주의 :

  • 이 INSERT에 열 이름을 지정하는 것이 현명 ... VALUES 사람이 열을 추가, 그렇지 않은 경우는 짜증과 것이기 때문에 사람이 열을 재정렬하는 경우 ' 혼란 스러울 것이다.

    • INSERT :

    • 당신의 선택과 갱신 사이의 경쟁 조건이 있습니다 ... 다른 프로세스가 여전히 삽입을 일으키는 원인이 생각하는 동안 행을 삭제/삽입 할 수/업데이트 중 하나를 고려 실패 ... DUPLICATE KEY UPDATE ON ...

    • 은 ...
+0

복제물을 삽입하거나 경쟁 조건을 수정하는 방법은 무엇입니까? –

관련 문제