SQLインジェクションを防ぐために、私はクエリをプリペアドステートメントに変換しています。私は1つ残しました。 null値も含まれているため、少し難しいことが分かります。通常可能なヌル値を持つプリペアドステートメントにMySQLクエリを変換する
:プリペアドステートメントで
// Declare $dbc, $varA, $varB, $varC, $ID
$varC = ($varC == '-') ? "NULL" : "'" . $varC . "'";
$query = "UPDATE myTable ";
$query .= "SET VARA = '{$varA}', VARB = '{$varB}', VARC = $varC ";
$query .= "WHERE ID = '{$ID}'";
$result = @mysqli_query($dbc, $query) or die("Error updating record: " . mysqli_error($dbc));
試み:
// Declare $dbc, $varA, $varB, $varC, $ID
$varC = ($varC == '-') ? "NULL" : "'" . $varC . "'";
$query = "UPDATE myTable ";
$query .= "SET VARA = ? VARB = ? VARC = ? ";
$query .= "WHERE ID = ?";
$stmt = mysqli_prepare($dbc, $query);
$bind = mysqli_stmt_bind_param($stmt, "ssss", $varA, $varB, $varC, $ID);
$exec = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
カラムがnullでもかまいませんが、nullを挿入するには問題ありません。私は文字列 "NULL"を送信しません(NULL!== "NULL")ので、このようなパラメータを "" '"引用する必要はありません。 $ varC。 "'" ' - ' $ varC'を送ってください – JimL
私もそのようにしましたが、クエリはDBをどちらの方法でも更新していないようです。 – Ali