未插入表中的值

时间:2013-11-13 00:51:05

标签: php sql

我正在尝试将一些值插入到数据库中,但是,它总是不成功,我不确定问题是什么。我可以得到一些帮助吗

$query1 = "INSERT INTO `incidenceoffire`(`locationOfFire`, `dateFireOccurred`, `timeFireOccurred`, `classOfFire`, `originOfFire`, `noOfWounded`, 
`noOfFatalities`,`occupancy`,`noOfFirePersonnelOnScene`,`noOfFireTrucks`,`backupUsed`)
VALUES('$locationoffire', '$datefireoccurred', '$timefireoccurred', '$classoffire', '$originoffire', '$occupancy', '$noofwounded', '$nooffatalities', 
'$noofpersonnel', '$nooftrucks', '$backuptrucks')";

    $incidenceoffire_id = mysql_insert_id();

    $query2 = "INSERT INTO `backuptrucks` (`unitName`) VALUES ('$unitname')";

    $query2 .=" WHERE `IncidenceOfFire_incidentID` = '".$incidenceoffire_id."'";

    $result = false;
    if(mysql_query('BEGIN')){

        if(mysql_query($query1) && mysql_query($query2))
        {
            $result = mysql_query('COMMIT');
            echo '<script type="text/javascript">
                    alert("Insert Successful!");
                  </script>';
        }
        else
        {
            mysql_query('ROLLBACK');
            echo '<script type="text/javascript">
                    alert("Insert Unsuccessful!");
                  </script>';
        }
    }   

1 个答案:

答案 0 :(得分:0)

为了清楚起见,这是您需要的。我不会优化它或任何东西,但它是你应该从哪里开始的基线。

$mysqli = new mysqli('host', 'name', 'user', 'database');

$query1 = $mysqli->prepare('INSERT INTO 
             `incidenceoffire`(
                 `locationOfFire`, 
                 `dateFireOccurred`, 
                 `timeFireOccurred`, 
                 `classOfFire`, 
                 `originOfFire`, 
                 `noOfWounded`,                      
                 `noOfFatalities`,
                 `occupancy`,
                 `noOfFirePersonnelOnScene`,
                 `noOfFireTrucks`,
                 `backupUsed`
             )
             VALUES(?,?,?,?,?,?,?,?,?,?,?));

在上面我们正在使用mysqli的准备。此函数将允许我们安全地转义传递给查询的数据。这是出于安全目的。 ?代表我们插入的与我们上面确定的字段相关联的值。

$query1->bind_param('sssssssssss', 
             $locationoffire, 
             $datefireoccurred, 
             $timefireoccurred, 
             $classoffire, 
             $originoffire, 
             $occupancy, 
             $noofwounded, 
             $nooffatalities, 
             $noofpersonnel, 
             $nooftrucks, 
             $backuptrucks);

在这里,我们使用bind_paramvariable绑定到我们在预准备语句中使用的?。这允许我们安全地逃避数据。第一个参数中的s代表string,因为我们希望从该变量接收的数据应该是一个字符串。您还可以使用i表示整数 - 仅预期数字,d表示加倍,如果您希望有.,的话。最后,如果您希望将blob随时间转移到语句中,则可以使用b

现在,因为您有两个语句,重复上述内容并使用$query2,然后您可以执行条件。我们将使用execute()来执行我们之前构建的预处理语句。

if($query1->execute() &&  $query2->execute()):
    $result[] = $query1->commit();
    $result[] = $query2->commit();
    echo '<script type="text/javascript">alert("Insert Successful!");</script>';
else:
    $result[] = $query1->rollback();
    $result[] = $query2->rollback();
    echo '<script type="text/javascript">alert("Insert Unsuccessful!");</script>';
endif;

这应该从一开始就适合你,但请阅读并理解正在传递的内容。始终使用http://php.net提供的文档和示例,请遵循最佳安全实践,减少您创建被黑客攻击的网站,并最终修复它