2016-03-27 46 views
0

sql enjeksiyonlarını engellemek için, sorgularımın hazırladığı ifadelere dönüştürüyorum. Bir tane kaldım. Olası bir boş değer de içerir, bu yüzden biraz zor olduğu kanıtlanır. NormalMySQL sorgusunu olası null değerine sahip hazır deyimine dönüştürün

: Hazırlanan deyimi de

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

Denemesi:

// 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

Sütun boş olabilir sürece null ekleme sorun olmamalıdır. Dize "NULL" (NULL! == "NULL") dizini göndermezdim ve bu "" "gibi param alıntı yapmak zorunda değilsiniz. $ varC. "'" '- sadece $ varC' – JimL

+0

’u gönderdim. Bu şekilde denedim, ancak sorgu her iki şekilde de DB’yi güncellemiyor gibi görünüyor. – Ali

cevap

2

Neden sadece

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

?

Ayrıca, Sorgunuzda

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

Edit virgül eksik: Sadece benim değişikliklerle kod koştum ve onu tamam çalışmak gibiydi.

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

Kodunuzun üstüne hatlarını bildiren hata eklemeyi deneyin ve herhangi bir hatayla olup olmadığını görmek Could: Referans için, bu kullandığım kod nedir?

+0

Ben de bu şekilde denedim, ancak sorguyu her iki şekilde de veritabanını güncelleştirmiyor gibi görünüyor. – Ali

+0

@Ali, SET deyiminizdeki tüm alanlarınız arasındaki virgülleri de unutmuşsunuzdur. Bunun için hesabımı cevaplandıracağım. – Chris

+0

güzel yakalama !, ancak DB'de değişiklik yok. Hazırlandıktan sonra sorgu çıktı almak için bir yolu var mı? – Ali

İlgili konular