Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySql和PDO:如何使用bindParam()发送空参数_Php_Mysql_Pdo - Fatal编程技术网

Php MySql和PDO:如何使用bindParam()发送空参数

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 <

参数$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 < 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(); 
}