미디어 파일에 파일을 업로드 한 뒤 업로드 경로를 다른 DB에다가 전달하려고 합니다

답변해주신 것을 참고하였습니다 

https://www.cosmosfarm.com/threads/document/24517

제가 미디어 파일을 올린 뒤에 다른 테이블에 미디어 파일을 올린 경로를 update문으로 날려서 수정하려고 합니다.

우선 경로를 가져오기 위해서 select 문으로 올린 아이디를 조건문으로 한 뒤에 가장 최신에 쓴 글을 가져와서

guid(경로값)을 가져와서 user_id를 다른 테이블의 id랑 비교하여 같으면 그걸 바꾸는 쿼리인데 오류가 생깁니다

코드를 올려야 할 경우 '코드 스니펫 삽입' 기능을 사용해달라고 하셨는데 이걸 어떻게 사용하는지 몰라서

이번에 이렇게 올렸습니다. 죄송합니다


add_action('add_attachment', 'attachment_manipulation');
function attachment_manipulation($id){
    if(is_user_logged_in()){

        $sql = "SELECT guid FROM wp_posts WHERE post_author=".$id." ORDER BY post_date ASC LIMIT 1";
        $arr_rs = $wpdb->get_row(esc_sql($sql),ARRAY_N);

        $guid = "";
        foreach($arr_rs as $r){ 
            $guid = $r[0];
        }

        $wpdb->update('wp_subscription_business',array('guid' => $guid),array( 'user_id',   $id),array( '%s'),array( '%d'));
    }
}


 

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    워드프레스에서 테마의 functions.php 파일이나 다른 곳에서

    $wpdb를 사용하시려면 global $wpdb; 코드를 추가해주셔야 합니다.

    아래의 코드를 활용해보시겠어요?

    add_action('add_attachment', 'attachment_manipulation');
    function attachment_manipulation($id){
    	global $wpdb;
    	if(is_user_logged_in()){
    		$sql = "SELECT guid FROM wp_posts WHERE post_author=".$id." ORDER BY post_date ASC LIMIT 1";
    		$arr_rs = $wpdb->get_row(esc_sql($sql),ARRAY_N);
    		
    		$guid = $arr_rs;
    		
    		$wpdb->update('wp_subscription_business',array('guid' => $guid),array( 'user_id',   $id),array( '%s'),array( '%d'));
    	}
    }

    고맙습니다.

  • 코드 감사합니다

    추가적으로 질문할게 있는데요

    함수에서 받은 매개변수 ($id) <= 이 변수가 뭔지 알고 싶습니다

    저는 사용자의 wp_users 테이블의 ID 칼럼 값으로 알고 있는데 ID칼럼 값이 아닌 user_login 칼럼 값인가요?

    ID 칼럼 값이면 업데이트가 맞게끔 작동이 되어야하는데 작동이 안되서 난감해서 추가적으로 질문드립니다

  • $id 값은 wp_posts 테이블에서 ID컬럼입니다.

    현재 로그인된 사용자의 id를 가져오시려면

    get_current_user_id() 함수로 가져오실 수 있습니다.

    고맙습니다.

  • 이 코드가 맞는 코드일까요?


    add_action('add_attachment', 'attachment_manipulation');
    function attachment_manipulation(){
        global $wpdb;
        $id = get_current_user_id();
        if(is_user_logged_in()){
            $sql = "SELECT guid FROM wp_posts WHERE post_author=".$id." ORDER BY post_date DESC LIMIT 1";
            $arr_rs = $wpdb->get_row(esc_sql($sql),ARRAY_N);
            
            $guid = $arr_rs;

            $wpdb->update('wp_subscription_business',array('guid' => $guid),array('user_id', $id), array('%s'), array('%d'));
        }
    }


    미디어 라이브러리에 현재 사용자가 이미지 업로드 하고 그 경로를 가져와서 다른 DB에 넣는것 뿐인데

    작동이 안되네요. wp_posts에는 다 들어가는게 확인이 되는데 다른 DB에는 안 들어가니깐 답답하네요

    알고리즘이 잘못 되어있어서 그런걸까요?

  • wp_subscription_business 테이블이 실제로 있고 테이블 안에 값이 있는지요?

    아래의 코드로 적용하신 후에 업로드 시에 이미지 경로가 페이지에 표시되는지 확인해보시겠어요?

    add_action('add_attachment', 'attachment_manipulation');
    function attachment_manipulation($id){
    	global $wpdb;
    	$user_id = get_current_user_id();
    	if(is_user_logged_in()){
    		$sql = "SELECT guid FROM wp_posts WHERE post_author=".$user_id." ORDER BY post_date DESC LIMIT 1";
    		$arr_rs = $wpdb->get_row(esc_sql($sql));
    		$guid = $arr_rs->guid;
    		print_r($guid); exit;
    		$wpdb->update('wp_subscription_business',array('guid' => $guid),array('user_id', $user_id), array('%s'), array('%d'));
    	}
    }

    고맙습니다.

  • 네 페이지에 경로가 그대로 뜹니다.

    현재 테이블(wp_subscription_business)은 있고 guid 칼럼 값은 null 입니다

    null -> 'http://localhost:8080/wordpress/~.png' 이런 식으로 교체하려고 하는건데

    혹시 null이라서 update 문이 안된다는 건 아니겠죠?

    아니라면 DB 구조가 잘못 되어있는건가요?

    테이블에서 guid의 값은 이렇습니다

    table명 : wp_subscription_business

    Name : guid

    type : varcher(255)

    Defult : none 

    Collation : utf8_general_ci

    입니다

  • 안녕하세요.

    해당 테이블에 user_id 컬럼과 값이 있는지요?

    wp_subscription_business 테이블에 변경할 데이터들이 이미 있는지요?

    예를 들어서 업로드하는 회원 id가 '1'이라면 wp_subscription_business 테이블에서도

    회원 id가 '1'인 데이터가 있어야 값이 수정됩니다.

    그게 아니라면 별도로 체크를 해서 테이블에 회원의 id가 없을 때

    데이터를 추가해서 저장하고 있다면 수정하는 쿼리를 보내주셔야 할 듯합니다.

    아래의 코드를 활용해보시겠어요?

    add_action('add_attachment', 'attachment_manipulation');
    function attachment_manipulation($id){
    	global $wpdb;
    	$user_id = get_current_user_id();
    	if(is_user_logged_in()){
    		$sql = "SELECT guid FROM wp_posts WHERE post_author=".$user_id." ORDER BY post_date DESC LIMIT 1";
    		$arr_rs = $wpdb->get_row(esc_sql($sql));
    		$guid = $arr_rs->guid;
    		
    		$count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}subscription_business` WHERE `user_id`={$user_id}");
    		
    		if($count){
    			$wpdb->update("{$wpdb->prefix}subscription_business", array('guid' => $guid), array('user_id' => $user_id), array('%s', '%d'));
    		}
    		else{
    			$wpdb->insert("{$wpdb->prefix}subscription_business",array('guid' => $guid, 'user_id'=> $user_id), array('%s', '%d'));
    		}
    	}
    }

    고맙습니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요