Php MySql和PDO:如何使用bindParam()发送空参数
参数$isconfired的值可以为null、0或1。当我尝试发送“null”时,PDO将返回一个异常。我怎样才能解决这个问题Php MySql和PDO:如何使用bindParam()发送空参数,php,mysql,pdo,Php,Mysql,Pdo,参数$isconfired的值可以为null、0或1。当我尝试发送“null”时,PDO将返回一个异常。我怎样才能解决这个问题 $dbHandler = $dbConnection->prepare("INSERT INTO `Group` (visitId, guideId, groupSize, isConfirmed) VALUES (:visitId, :guideId, :groupSize, :isConfirmed)"); for($i = 0; $i <
$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();
}
$dbHandler=$dbConnection->prepare(“插入到`Group`(visitId,guideId,groupSize,isConfirmed)值(:visitId,:guideId,:groupSize,:isConfirmed)”);
对于($i=0;$ibindParam(“: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();
}
更改:
$dbHandler->bindParam(":isConfirmed", $isConfirmed, PDO::PARAM_INT);
致:
更新
好吧,我是个傻瓜,尽管我总是光顾别人 实际上没有必要弄乱param类型。如果值为NULL,PDO将自动绑定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
因此,正确的代码应该是
$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();
}
空值可以写入。如果是空值,则必须是
PDO::PARAM_null
,而不是PDO::PARAM_INT
。做一个检查来确定它是什么类型的。更好但仍然有缺陷如果(is_null($isconfired))比你的团队服务更好conditions@YourCommonSense谢谢。但我必须承认,对于13岁的孩子来说,这是一个很好的方法。@YourCommonSense谢谢你。另外,count($groupId)
在循环的每次迭代中。人们可以倒计时而不是倒计时:for($i=count($groupId);$i>0;$i--)
。这与问题没有直接关系,只是一个小的表演技巧。@BillKarwin这只是另一个老茧自缚的错觉。每次调用count()都没有问题。至少在PHPIf中,如果阵列很小,则影响将很小,但如果阵列很大,则成本会很高。它将循环从O(n)转到O(n^2)。这里有一个博客作者做了定时测试的例子:重复同样的测试是很有趣的,但是使用最新版本的PHP,而不是2009版本。
$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();
}