2016-03-27 4 views
0

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); 
+0

カラムがnullでもかまいませんが、nullを挿入するには問題ありません。私は文字列 "NULL"を送信しません(NULL!== "NULL")ので、このようなパラメータを "" '"引用する必要はありません。 $ varC。 "'" ' - ' $ varC'を送ってください – JimL

+0

私もそのようにしましたが、クエリはDBをどちらの方法でも更新していないようです。 – Ali

答えて

2

なぜだけではなく、

$varC = ($varC == '-') ? null : $varC; 

また、あなたはあなたのクエリに

$query .= "SET VARA = ?, VARB = ?, VARC = ? "; 

編集をコンマが欠落している: は、私はちょうど私の変更でコードを実行し、大丈夫に動作するように見えました。参考までに、これは私が使用するコードです:

<?php 
error_reporting(-1); 
ini_set('display_errors', 'On'); 

$dbc = mysqli_connect("127.0.0.1", "test", "test", "test"); 


$ID = "1"; 
$varA = "a"; 
$varB = "b"; 
$varC = "-"; 

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

あなたはあなたのコードの先頭に行をエラーレポートを追加してみてください、あなたはすべてのエラーを取得しているかどうかを確認してもらえますか?

+0

私もその方法を試しましたが、クエリはどちらの方法でもDBを更新していないようです。 – Ali

+0

@Aliでは、SETステートメントのすべてのフィールドの間にカンマも忘れています。私はそれについて説明するために私の答えを更新します。 – Chris

+0

いいキャッチですが、DBに変更はありません。それが準備された後にクエリを出力する方法はありますか? – Ali

関連する問題