1

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

$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>';
        }
    }   
4

1 回答 1

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的prepare。这个函数将允许我们安全地转义传递给查询的数据。这是出于安全目的。?表示我们要插入的与我们在上面确定的字段相关联的值。

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

在这里,我们习惯于将 'bind_param绑定variable?我们在准备好的语句中使用的 '。这使我们能够安全地转义数据。第s一个参数中的 the 代表string我们期望从该变量接收的数据应该是一个字符串。您也可以使用i整数 - 只需要数字时d,如果您希望有.'s 和,'s,则可以使用双精度数。最后,b如果您希望随着时间的推移将 blob 传输到语句,则可以使用。

现在,因为你有两个语句,重复上面并使用$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提供的文档和示例,请遵循最佳安全实践,否则您会创建一个被黑客入侵的网站,而我最终会修复它

于 2013-11-13T01:17:39.200 回答