2016-03-27 12 views
0

Um SQL-Injektionen zu vermeiden, konvertiere ich meine Abfragen in vorbereitete Anweisungen. Ich habe noch eins. Es enthält auch einen möglichen Nullwert, daher erweist es sich als etwas schwierig.MySQL-Abfrage in vorbereitete Anweisung mit möglichem Nullwert konvertieren

Normal:

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

Versuch vorbereitete Anweisung:

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

Solange die Spalte null sein kann, sollte es kein Problem sein, Null einzufügen. Ich würde jedoch die Zeichenkette "NULL" nicht einsenden (NULL! == "NULL"), und Sie müssen den Parameter nicht wie dieses "" 'zitieren. $ varC. "'" '- senden Sie einfach' $ varC' – JimL

+0

Ich habe es auch so versucht, aber die Abfrage scheint die DB nicht zu aktualisieren. – Ali

Antwort

2

Warum nicht einfach

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

?

Auch sind Sie nicht die Kommas in Ihrer Anfrage

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

Edit: Ich lief den Code mit meinen Änderungen und es schien in Ordnung zu arbeiten. Als Referenz ist dies der Code, den ich verwendet:

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

Könnten Sie versuchen Sie, den Fehler Zeilen an den Anfang des Codes Berichterstattung und sehen, ob Sie Fehler bekommen?

+0

Ich habe es auch so versucht, aber die Abfrage scheint die DB nicht zu aktualisieren. – Ali

+0

@Ali, Sie haben auch die Kommata zwischen all Ihren Feldern in Ihrer SET-Anweisung vergessen. Ich werde meine Antwort aktualisieren, um das zu erklären. – Chris

+0

schöner Fang !, aber keine Änderung in der DB. Gibt es eine Möglichkeit, die Abfrage NACH der Vorbereitung auszugeben? – Ali

Verwandte Themen