[英]Filter out unset mysqli_query
我正在尝试根据变量值动态设置一些sql。
所以我有
$somevariable = "somevalue" I set some $sql and $a1 = mysqli_query($con, $sql1)
$somevariable2 = "somevalue2" I set some $sql2 and $a2 = mysqli_query($con, $sql2)
等等..
现在我想运行这些查询,如果其中任何一个为FALSE,我想回滚
这就是我所做的。
mysqli_autocommit($con, FALSE);
if ($a1 and $a2 and $a3 and $a4 and $a5 and $a6)
{
mysqli_commit($con);
}
else
{
mysqli_rollback($con);
}
现在我的问题是$ a可以是任何数字,并且介于两者之间的任何数字也可能不仅仅像$ a1和$ a7那样,或者类似的东西。
因此,如果我说($ a1和$ a2以及$ a3和$ a4以及$ a5和$ a6),则不会提交,因为其中一个变量不存在。
如果我给出($ a1或$ a2或$ a3或$ a4或$ a5或$ a6),它将仅运行第一个查询并提交。
因此,在我给出“ and”进行提交之前,如何给出尽可能多的变量并过滤掉未设置的变量
我努力了
$tmp = array($a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$a10);
$filtered = array_filter($tmp);
$one = implode("and", $filtered)
if ($one)
{
mysqli_commit($con);
}
else
{
mysqli_rollback($con);
}
但它也不行..任何想法? 谢谢。
您无需为每次交互使用显式变量,除非您希望以后使用它们。 您可以使用[]
将结果追加到数组中,以免留下未分配的成员,并使用array_reduce进行求值。
function bool_and($a,$b) { return $a and $b; }
$result_array = array();
$result_array[] = mysqli_query($con, $sql1)
$result_array[] = mysqli_query($con, $sql2)
$result_array[] = mysqli_query($con, $sql7)
if (array_reduce($result_array,"bool_and",true))
{
mysqli_commit($con);
}
else
{
mysqli_rollback($con);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.