차이점은 무엇이며 PDOStatement::bindParam()
그리고 PDOStatement::bindValue()
?
답변
답은 다음 문서에 있습니다 bindParam
.
PDOStatement :: bindValue ()와 달리 변수는 참조로 바인딩되며 PDOStatement :: execute ()가 호출 될 때만 평가됩니다.
과 execute
PDOStatement :: bindParam ()을 호출하여 PHP 변수를 매개 변수 표시 문자에 바인드하십시오. 바운드 변수는 값을 입력으로 전달하고 연관된 매개 변수 표시 문자의 출력값을 수신합니다 (있는 경우).
예:
$value = 'foo';
$s = $dbh->prepare('SELECT name FROM bar WHERE baz = :baz');
$s->bindParam(':baz', $value); // use bindParam to bind the variable
$value = 'foobarbaz';
$s->execute(); // executed with WHERE baz = 'foobarbaz'
또는
$value = 'foo';
$s = $dbh->prepare('SELECT name FROM bar WHERE baz = :baz');
$s->bindValue(':baz', $value); // use bindValue to bind the variable's value
$value = 'foobarbaz';
$s->execute(); // executed with WHERE baz = 'foo'
답변
에 대한 수동 입력에서PDOStatement::bindParam
:
[With
bindParam
]와 달리PDOStatement::bindValue()
변수는 참조로 바인딩되며PDOStatement::execute()
호출 할 때만 평가됩니다 .
예를 들어,
$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'
답변
여기 내가 생각할 수있는 것들이 있습니다 :
- 을 사용하면
bindParam
변수 만 전달할 수 있습니다. 값이 아님 - 을 사용
bindValue
하면 (값, 분명히, 변수)를 모두 전달할 수 있습니다 bindParam
변수는 “reference”에 의해 입력 / 출력으로 매개 변수를 제공 할 수 있기 때문에 변수와 만 작동합니다 (그리고 PHP에서 값은 유효한 “reference”가 아닙니다 ).
데이터를 출력 매개 변수로 리턴하는 저장 프로 시저 호출 및 일부는 데이터를 보내고이를 수신하도록 업데이트되는 입력 / 출력 매개 변수로 호출을 지원합니다.
일부 DB 엔진의 경우 저장 프로 시저에는 입력 (PHP에서 프로 시저로 값 제공) 및 출력 (저장된 프로 시저에서 PHP로 값 반환)에 모두 사용할 수있는 매개 변수가있을 수 있습니다. 이러한 매개 변수를 바인딩하려면 bindValue가 아닌 bindParam을 사용해야합니다.
답변
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();
답변
가장 일반적인 목적으로을 사용해야합니다 bindValue
.
bindParam
두 가지 까다 롭거나 예기치 않은 동작이 있습니다.
bindParam(':foo', 4, PDO::PARAM_INT)
변수를 (참조로) 전달해야하므로 작동하지 않습니다.bindParam(':foo', $value, PDO::PARAM_INT)
$value
실행 후 문자열로 변경 됩니다execute()
. 물론 이것은 잡기 어려운 미묘한 버그로 이어질 수 있습니다.
출처 : http://php.net/manual/en/pdostatement.bindparam.php#94711
답변
이것을 완화시키는 방법이있을 때 더 이상 고투 할 필요가 없습니다.
$stmt = $pdo->prepare("SELECT * FROM someTable WHERE col = :val");
$stmt->execute([":val" => $bind]);
답변
행동으로 암기 할 수있는 가장 간단한 방법 (PHP 측면에서) :
bindParam:
참고bindValue:
변하기 쉬운