0

現在、テキストボックスに2つの「WS_ID」番号を間にスペースを入れて送信しています。私が持っているSQLコマンドはSQLデータベースの2つの結果を更新できますが、テキストボックスに送信された「WS_ID」が1つしかない場合、何も更新されません。どんな助けでも素晴らしいでしょう。どうもありがとう。

         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 が認識しているとは思いません。

非推奨のコードが PHP から削除された後、SQL インジェクションとコードの失敗を防ぐために、MYSQLI を使用するコード:

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

また、私の他の考えでは、 の値が 1 つしかない場合$WS_ID2、PHP は $WS_ID[1] の範囲外エラーを出さないのでしょうか?

于 2012-08-02T13:18:09.790 に答える