0

目前,我在一个文本框中提交了两个“WS_ID”数字,它们之间有一个空格。我拥有的 SQL 命令能够更新 sql 数据库中的两个结果,但是当文本框中只提交一个“WS_ID”时,什么都没有更新。任何帮助都会很棒。非常感谢。

         if(isset($_GET["Update"]))
        {   $DEP_TIME = $_GET["DEP_TIME"];
            $ARR_TIME = $_GET["ARR_TIME"];
            $TRAVEL_TIME = $_GET["TRAVEL_TIME"];
            $HRS_WORKED = $_GET["HRS_WORKED"];
            $INC_DEP_TIME = $_GET["INC_DEP_TIME"];
            $INC_LAB_DAY = $_GET["INC_LAB_DAY"];
            $LAB_DATE = $_GET["LAB_DATE"];
            $WS_ID = $_GET["WS_ID"];
            $WS_ID2 = explode(" ", $WS_ID);
            $SQL = "UPDATE `elecsys`.`worksheet_labour` SET DEP_TIME = $DEP_TIME, ARR_TIME = $ARR_TIME, TRAVEL_TIME = $TRAVEL_TIME, HRS_WORKED = $HRS_WORKED WHERE WS_ID = $WS_ID2[0] OR WS_ID = $WS_ID2[1]"; 
            $resultset2 = mysql_query($SQL);                
        }
4

1 回答 1

2

在您的 sql 中,您可能需要在当前值周围加上引号。但是,目前您会受到 SQL 注入的影响。您应该使用 PDO 或 MYSQLI 来避免这种情况。

什么时候$WS_ID2[1]是空白的,WHERE WS_ID=value OR WS_ID = ;我不相信 MYSQL 知道那是没有引号的空白。

使用 MYSQLI 的代码,以防止 SQL 注入和您的代码在从 PHP 中删除不推荐使用的代码后失败:

$con = new mysqli($databasehost,$dbuser,$dbpassword);
if ($con->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " .  $mysqli->connect_error;
}
//Set all your variables here, omitted from code...
$stmt = $con->prepare("UPDATE `elecsys`.`worksheet_labour` SET DEP_TIME = ?, ARR_TIME = ?, TRAVEL_TIME = ?, HOURS_WORKED = ?, WHERE WS_ID = ? OR WS_ID = ?");
//bind using data according to http://www.php.net/manual/en/mysqli-stmt.bind-param.php
$stmt->bind_param('ssddii', $DEP_TIME, $ARR_TIME, $TRAVEL_TIME, $HRS_WORKED, $WS_ID2[0], $WS_ID2[1]);
$stmt->execute();
$stmt->close();
$con->close();

另外,我的另一个想法是,如果您只有一个 的值$WS_ID2,PHP 不会为 $WS_ID[1] 给出越界错误吗?

于 2012-08-02T13:18:09.790 回答