이 코드를 사용하고 있으며 좌절감이 없습니다.
try {
$dbh = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
}
catch(PDOException $e)
{
...
}
$stmt = $dbh->prepare('INSERT INTO table(v1, v2, ...) VALUES(:v1, :v2, ...)');
$stmt->bindParam(':v1', PDO::PARAM_NULL); // --> Here's the problem
PDO::PARAM_NULL, null, '',
모두 실패하고 다음 오류가 발생합니다.
치명적인 오류 : / opt / …에서 참조로 매개 변수 2를 전달할 수 없습니다.
답변
난 그냥 PDO를 배우고,하지만 난 당신이 사용할 필요가 있다고 생각 bindValue
하지bindParam
bindParam
참조 할 변수를 취하고을 호출 할 때 값을 가져 오지 않습니다 bindParam
. 나는 이것을 PHP 문서에 대한 주석에서 발견했습니다.
bindValue(':param', null, PDO::PARAM_INT);
편집 : 추신 : 당신은 이것을 bindValue(':param', null, PDO::PARAM_NULL);
하고 싶을 수도 있지만 모든 사람에게 효과가 없었습니다 (보고 해 주신 Will Shaver에게 감사드립니다.)
답변
사용할 때 bindParam()
상수가 아닌 변수를 전달해야합니다. 따라서 해당 줄 전에 변수를 만들고 다음으로 설정해야합니다.null
$myNull = null;
$stmt->bindParam(':v1', $myNull, PDO::PARAM_NULL);
시도한 경우 동일한 오류 메시지가 표시됩니다.
$stmt->bindParam(':v1', 5, PDO::PARAM_NULL);
답변
MySQL에서 INTEGER
열 (일 수 있음 NULL
) 을 사용할 때 PDO는 예상치 못한 동작을합니다.
를 사용 $stmt->execute(Array)
하는 경우 리터럴을 지정해야하며 변수 참조로 NULL
제공 할 수 없습니다 NULL
. 따라서 이것은 작동하지 않습니다.
// $val is sometimes null, but sometimes an integer
$stmt->execute(array(
':param' => $val
));
// will cause the error 'incorrect integer value' when $val == null
그러나 이것은 작동합니다.
// $val again is sometimes null, but sometimes an integer
$stmt->execute(array(
':param' => isset($val) ? $val : null
));
// no errors, inserts NULL when $val == null, inserts the integer otherwise
PHP 5.4.1을 사용하여 MySQL 5.5.15에서 이것을 시도했습니다.
답변
여전히 문제가있는 경우 (참조로 매개 변수 2를 전달할 수 없음) PDO에 null을 전달하는 것이 아니라 null 값으로 변수를 정의하십시오.
bindValue(':param', $n = null, PDO::PARAM_INT);
도움이 되었기를 바랍니다.
답변
나는 같은 문제가 있었고 bindParam과 함께 작동하는이 솔루션을 발견했습니다.
bindParam(':param', $myvar = NULL, PDO::PARAM_INT);
답변
삽입 할 경우 NULL
(가)에만 value
있다 empty
거나 ''
,하지만 삽입 value
이 가능한 경우.
A) POST 메서드를 사용하여 양식 데이터를 수신하고 해당 값으로 함수 삽입을 호출합니다.
insert( $_POST['productId'], // Will be set to NULL if empty
$_POST['productName'] ); // Will be to NULL if empty
B) 사용자가 필드를 채우지 않았는지 평가 NULL
하고 그럴 경우 삽입 합니다.
public function insert( $productId, $productName )
{
$sql = "INSERT INTO products ( productId, productName )
VALUES ( :productId, :productName )";
//IMPORTANT: Repace $db with your PDO instance
$query = $db->prepare($sql);
//Works with INT, FLOAT, ETC.
$query->bindValue(':productId', !empty($productId) ? $productId : NULL, PDO::PARAM_INT);
//Works with strings.
$query->bindValue(':productName',!empty($productName) ? $productName : NULL, PDO::PARAM_STR);
$query->execute();
}
사용자가에 입력하지 아무것도 않는 경우 예를 들어, productName
양식의 필드를, 다음 $productName
될 것입니다 SET
하지만 EMPTY
. 따라서인지 확인 empty()
하고이면을 삽입해야 NULL
합니다.
PHP 5.5.17에서 테스트 됨
행운을 빕니다,
답변
이 시도.
$stmt->bindValue(':v1', null, PDO::PARAM_NULL); // --> insert null