【问题标题】:How to write to database with condition?如何在有条件的情况下写入数据库?
【发布时间】:2017-07-31 17:33:39
【问题描述】:

我是 PHP 的初学者,我在有条件的情况下写入数据库时​​遇到问题。我有带变量的数组。我需要将值为 1 的变量保存到数据库中。其他一些变量的值可以是 0 或 5,正如我所说的,也可以是 1。

带变量的数组:

<?php session_start();    
        $qA01_1 = $_SESSION['qA01_1'];     
        $qA01_2 = $_SESSION['qA01_2'];
        $qA01_3 = $_SESSION['qA01_3'];
        $qA01_4 = $_SESSION['qA01_4'];
        $qA01_5 = $_SESSION['qA01_5'];

        $qA02_1 = $_SESSION['qA02_1'];     
        $qA02_2 = $_SESSION['qA02_2'];
        $qA02_3 = $_SESSION['qA02_3'];
        $qA02_4 = $_SESSION['qA02_4'];
        $qA02_5 = $_SESSION['qA02_5'];

        $qA03_1 = $_SESSION['qA03_1'];     
        $qA03_2 = $_SESSION['qA03_2'];
        $qA03_3 = $_SESSION['qA03_3'];
        $qA03_4 = $_SESSION['qA03_4'];
        $qA03_5 = $_SESSION['qA03_5'];

        $qA04_1 = $_SESSION['qA04_1'];     
        $qA04_2 = $_SESSION['qA04_2'];
        $qA04_3 = $_SESSION['qA04_3'];
        $qA04_4 = $_SESSION['qA04_4'];
        $qA04_5 = $_SESSION['qA04_5'];

        $qA05_1 = $_SESSION['qA05_1'];     
        $qA05_2 = $_SESSION['qA05_2'];
        $qA05_3 = $_SESSION['qA05_3'];
        $qA05_4 = $_SESSION['qA05_4'];
        $qA05_5 = $_SESSION['qA05_5'];
?>

这是我在有条件的数据库中写入的尝试(不起作用):

 $connect = mysqli_connect('localhost', 'root', 'pass', 'database');
        $varValue = 1;
        $values = [];
        foreach([1,2,3,4,5] as $index) {
           if(['$qA01_'.$index] == 1) {
               $values[] = "('$qA01_{$index}')";
           };
        }
        $query = "INSERT INTO table ($varValue) VALUES ". implode(',',$values);  
        mysqli_query($connect, $query);

你能帮我提供正确的代码吗?

Here is old table where are together value 0, 1, 5.

现在我想要三张桌子。第一个为值 1“tableOK”,第二个为值 5“tableNOK”,第三个为信息表“tableinfo”。

Three new tables created in Excel and my wishes in phpMyAdmin (my proposal)

【问题讨论】:

    标签: php arrays database mysqli conditional-statements


    【解决方案1】:

    对于新结构,假设字段默认值为0:

     $connect = mysqli_connect('localhost', 'root', 'pass', 'database');
    if (mysqli_connect_errno())
        echo "Error connection: (" . mysqli_connect_errno().")";
    
    $values = [];
    $fields = [];
    for($i=1;$i<=30;$i++)
    {
        foreach([1,2,3,4,5] as $index) 
        {
            if(${'qA'.str_pad($i, 2, "0", STR_PAD_LEFT).'_'.$index} == 1) 
            {
                $values[] = ${'qA'.str_pad($i, 2, "0", STR_PAD_LEFT).'_'.$index};
                $fields[] = 'qA'.str_pad($i, 2, "0", STR_PAD_LEFT).'_'.$index;
            }
        }
    }
    $query = "INSERT INTO tableOK(".implode(',',$fields).") VALUES (". implode(',',$values).")";
    
    if( !  mysqli_query($connect, $query))
    {
        echo "Error query: ".mysqli_error($connect)
    }
    

    这会检查所有$qA01_...$qA30_...

    【讨论】:

    • 亲爱的 Nerea,我已尝试替换您的提案“如果条件”,但数据库中没有保存任何内容。我可以在最后两行有问题吗?
    • @Nezdecek 在您的查询INSERT INTO table ($varValue) 尝试更改数据库中字段名称的$varValue,还要检查您是否更改了表名称的单词表,并且首先检查你是否进入了 if 条件。如果仍然无法工作,请发布echo $query 的结果。
    • 我更新了答案,我以为你想将'$qA01_'.$index的值保存到数据库中,然后我看到你想将这个变量保存为文本,对吗?
    • 我在原始问题中添加了更多信息(带有在 excel 中创建的表格的图片)。希望它可以有点清楚:)。非常感谢您的帮助。顺便说一句:qA01_1 到 qA30_5 都是时间变量。它们的值可以是数字 0 或 1 或 5。
    • 感谢您的更新。 “回声$查询;”看起来不错:INSERT INTO tableok qA01_1,qA04_4,qA09_4,qA14_1,qA16_2,qA17_5,qA18_2,qA21_5,qA24_2 值 1,1,1,1,1,1,1,1,1。但是 phpMyAdmin 中的“tableok”是空的。我不明白为什么没有将值粘贴到数据库中。
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 2019-03-05
    • 2022-07-21
    • 1970-01-01
    相关资源
    最近更新 更多