Reputation: 668
The value of the param $isConfirmed can be null, 0 or 1. When I try to send "null", PDO is returning me an Exception. How can I resolve that problem ?
$dbHandler = $dbConnection->prepare("INSERT INTO `Group` (visitId, guideId, groupSize, isConfirmed) VALUES (:visitId, :guideId, :groupSize, :isConfirmed)");
for($i = 0; $i < count($groupId); $i++) {
$dbHandler->bindParam(":visitId", $visitId, PDO::PARAM_INT);
$dbHandler->bindParam(":guideId", $guideId, PDO::PARAM_INT);
$dbHandler->bindParam(":groupSize", $groupSize, PDO::PARAM_INT);
$dbHandler->bindParam(":isConfirmed", $isConfirmed, PDO::PARAM_INT);
$dbHandler->execute();
}
Upvotes: 1
Views: 5552
Reputation: 157889
Update
Well, I was a fool, with all my patronizing.
There actually no need for messing with param type. PDO automatically binds NULL, if value is NULL:
$sql = "CREATE TEMPORARY TABLE `nulltest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NULL DEFAULT '',
PRIMARY KEY (`id`)
)";
$pdo->exec($sql);
$stm = $pdo->prepare("INSERT INTO nulltest SET name = ?");
foreach (array("foo", null) as $val)
{
$stm->execute([$val]);
}
$stm->bindParam(1, $val, PDO::PARAM_STR);
$stm->execute();
$stm->bindValue(1, NULL, PDO::PARAM_INT);
$stm->execute();
$sql = "SELECT count(*) FROM nulltest WHERE name IS NULL";
$num = $pdo->query($sql)->fetchColumn();
var_dump($num); // outputs 3
So, the proper code would be
$sql = "INSERT INTO `Group` (visitId, guideId, groupSize, isConfirmed)
VALUES (:visitId, :guideId, :groupSize, :isConfirmed)";
$stm = $dbConnection->prepare($sql);
$stm->bindParam(":visitId", $visitId, PDO::PARAM_INT);
$stm->bindParam(":guideId", $guideId, PDO::PARAM_INT);
$stm->bindParam(":groupSize", $groupSize, PDO::PARAM_INT);
$stm->bindParam(":isConfirmed", $isConfirmed, PDO::PARAM_INT);
foreach($groupId as $void)
{
$stm->execute();
}
nulls will be written all right.
Upvotes: 2
Reputation: 3563
Change :
$dbHandler->bindParam(":isConfirmed", $isConfirmed, PDO::PARAM_INT);
to :
if(is_null($isConfirmed) || !is_int($isConfirmed)){
$v=null;
$dbHandler->bindParam(":isConfirmed", $v, PDO::PARAM_NULL);
}else{
$dbHandler->bindParam(":isConfirmed", $isConfirmed, PDO::PARAM_INT);
}
Upvotes: 1