복붙노트

bindParam과 bindValue의 차이점은 무엇입니까?

PHP

bindParam과 bindValue의 차이점은 무엇입니까?

PDOStatement :: bindParam ()과 PDOStatement :: bindValue ()의 차이점은 무엇입니까?

해결법

  1. ==============================

    1.대답은 bindParam의 설명서에 있습니다.

    대답은 bindParam의 설명서에 있습니다.

    실행

  2. ==============================

    2.PDOStatement :: bindParam에 대한 수동 항목에서 :

    PDOStatement :: bindParam에 대한 수동 항목에서 :

    예를 들면 다음과 같습니다.

    $sex = 'male';
    $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
    $s->bindParam(':sex', $sex); // use bindParam to bind the variable
    $sex = 'female';
    $s->execute(); // executed with WHERE sex = 'female'
    

    또는

    $sex = 'male';
    $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
    $s->bindValue(':sex', $sex); // use bindValue to bind the variable's value
    $sex = 'female';
    $s->execute(); // executed with WHERE sex = 'male'
    
  3. ==============================

    3.다음은 내가 생각할 수있는 몇 가지 예입니다.

    다음은 내가 생각할 수있는 몇 가지 예입니다.

    일부 DB 엔진의 경우 저장 프로 시저에는 입력 (PHP에서 프로 시저로 값 지정) 및 출력 (저장 프로 시저에서 PHP로 값 반환)에 사용할 수있는 매개 변수가있을 수 있습니다. 이러한 매개 변수를 바인딩하려면 bindValue가 아니라 bindParam을 사용해야합니다.

  4. ==============================

    4.가장 일반적인 목적으로 bindValue를 사용해야합니다.

    가장 일반적인 목적으로 bindValue를 사용해야합니다.

    bindParam에는 두 가지 까다로운 예기치 않은 동작이 있습니다.

    출처 : http://php.net/manual/en/pdostatement.bindparam.php#94711

  5. ==============================

    5.Prepared 문과 저장 프로 시저에서

    Prepared 문과 저장 프로 시저에서

    bindParam을 사용하여 하나의 시간 바인딩을 사용하여 여러 행을 삽입하십시오.

    <?php
    
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
    $stmt->bindParam(1, $name);
    $stmt->bindParam(2, $value);
    
    // insert one row
    $name = 'one';
    $value = 1;
    $stmt->execute();
    
    // insert another row with different values
    $name = 'two';
    $value = 2;
    $stmt->execute();
    
  6. ==============================

    6.이런 식으로 존재할 때 더 이상 고생 할 필요가 없습니다.

    이런 식으로 존재할 때 더 이상 고생 할 필요가 없습니다.

    $stmt = $pdo->prepare("SELECT * FROM someTable WHERE col = :val");
    $stmt->execute([":val" => $bind]); 
    
  7. ==============================

    7.PHP를 사용하는 가장 간단한 방법은 다음과 같습니다.

    PHP를 사용하는 가장 간단한 방법은 다음과 같습니다.

  8. ==============================

    8.bindParam ()에 대한 문서에서 읽을 수있는 두 가지 메소드의 주요 차이점은 프로 시저 호출에서 매개 변수 변수가 전달되는 방법입니다.

    bindParam ()에 대한 문서에서 읽을 수있는 두 가지 메소드의 주요 차이점은 프로 시저 호출에서 매개 변수 변수가 전달되는 방법입니다.

    bindParam () 메서드는 매개 변수 마커를 값 자체가 아닌 출력 값을 보유 할 PHP 변수의 이름에 바인딩합니다. 또한 PDOStatement :: execute ()가 호출 될 때만 값이 평가됩니다.

    반대로, bindValue () 메소드는 참조하는 PHP 변수의 값에 매개 변수 마커를 바인드하므로 PDOStatement :: execute ()가 호출 될 때 즉시 사용할 수 있습니다.

    bindParam () 메서드를 사용할 때 매개 변수가 OUT 매개 변수 인 경우 저장 프로 시저에서 값을 가져 오는 변수에 바인드한다는 의미이므로 길이 매개 변수 문서에 명시된대로 길이를 명시 적으로 설정해야합니다 :

    데이터베이스에 정의 된 예상 최대 길이와 일치하도록 출력 매개 변수의 길이를 설정해야합니다.

  9. from https://stackoverflow.com/questions/1179874/what-is-the-difference-between-bindparam-and-bindvalue by cc-by-sa and MIT license