본문 바로가기
MySql

MySQL 다른 경우에만 PDO MYSQL 업데이트

by 베이스 공부 2020. 12. 1.
반응형

관리자가 사용자 정보를 업데이트 할 수있는 웹 프로그램이 있습니다. 즉, 실제로 '업데이트 된'열만 업데이트하고 싶습니다 ...

나는 이것에 대해 꽤 많은 연구를 해왔고 모든 방법이 입력을 이스케이프하기 위해 prepare 문을 사용하지 않는 오래된 쿼리를 사용하는 것 같습니다.

누군가가 성명서로 나를 도울 수 있습니까?

본질적으로 의사 코드 : $ editedUserdata [ 'firstname']이면 FIRSTNAME 업데이트! = FIRSTNAME, $ editedUserData [ 'lastname']이면 LASTNAME ! = LASTNAME ... etc ...

다음은 포스트 코드에 대한 것입니다.

        $password = sha1($password);
        $editedUserData = array(
              'firstname' => $firstname,
              'lastname' => $lastname,
              'username' => $username,
              'password' => $password,
              'cellphone' => $cellphone,
              'security_level' => $seclvl,
              'email' => $email,
              'direct_phone' => $direct,
              'ext_num' => $extension,
              'is_active' => $userflag
            );

그러면 다음과 같아야합니다.

$query = $this->db->prepare('UPDATE FIRSTNAME if(?) IS NOT FIRSTNAME, LASTNAME if(?) IS NOT LASTNAME, USERNAME if (?) IS NOT USERNAME.... VALUES (:firstname, :lastname, :username).....'

if ($query -> execute($editedUserData)) {
    more code....

 

해결 방법

 

해결하려는 문제를 이해하지 못하지만 필드 값이 변경되었는지 테스트 할 필요는 없습니다.

필드 값이 "A"이고 거기에 "A"를 넣으면 그렇지 않으면 동일하게 유지되고 "B"를 넣으면 예상대로 업데이트됩니다.

준비된 진술은 다음과 같습니다.

$stmt = $dbh->prepare("
    UPDATE table_name
    SET
        field1 = :value1,
        field2 = :value2
    WHERE
        field0 = :key
");

$stmt->bindParam(':value1', $value1, PDO::PARAM_STR);
$stmt->bindParam(':value2', $value2, PDO::PARAM_STR);
$stmt->bindParam(':key', $key, PDO::PARAM_INT);

$stmt->execute()

 

참조 페이지 https://stackoverflow.com/questions/25538031

 

 

반응형

댓글