过滤掉未设置的mysqli_query

时间:2014-06-27 23:28:33

标签: php sql mysqli

我正在尝试根据变量值动态设置一些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),它只运行第一个查询并提交。

那么我怎样才能提供与我设置的一样多的变量并在我为'commit'提供'和'之前过滤掉未设置的变量

我试过了

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

但它也不会工作..任何想法?感谢。

1 个答案:

答案 0 :(得分:2)

除非您以后需要使用显式变量,否则不需要为每个交互使用显式变量。您可以使用[]将结果附加到数组中,这样您就不会离开未分配的成员,并使用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);
}