2012-11-29 75 views
0

可能重複:
Best way to prevent SQL injection?SQL注入插入

我無法理解如何消毒PHP對SQL注入,並希望有人會好心地給我解釋一下爲了使我的代碼安全,我需要在這裏更改什麼?

<?php 
$dbConnection = mysqli_connect('****', '****', '****', 'db'); 

$query = "INSERT INTO `table` (`1`, `2`, `3`) VALUES ('$_POST[1]', '$_POST[2]', '$_POST[3]')"; 

if (mysqli_query($dbConnection, $query)) { 
echo "Successfully inserted " . mysqli_affected_rows($dbConnection) . " row"; 
} else { 
echo "Error occurred: " . mysqli_error($dbConnection); 
} 
?> 

回答

2

的MySQLi支持prepared statements,這比手動逃逸更好:

由於您使用的程序庫MySQLi,這裏有一個例子:

/* create a prepared statement */ 
if ($stmt = mysqli_prepare($dbConnection, "INSERT INTO `table` (`1`, `2`, `3`) VALUES (?, ?, ?)")) 
{ 

    /* bind parameters for markers */ 
    mysqli_stmt_bind_param($stmt, "sss", $_POST[1], $_POST[2], $_POST[3]); 

    /* execute query */ 
    if(mysqli_stmt_execute($stmt)) 
    { 
     echo "Successfully inserted " . mysqli_affected_rows($dbConnection) . " row"; 
    } 
    else 
    { 
     echo "Error occurred: " . mysqli_error($dbConnection); 
    } 

    /* close statement */ 
    mysqli_stmt_close($stmt); 
} 
+0

非常感謝你:) – kadeshiseraph

1

爲了防止SQL注入,您可以使用準備好的語句。你需要一些更mysqli_功能爲:

有了這些,你可以寫類似以下內容:

$dbConnection = mysqli_connect('****', '****', '****', 'db'); 

// prepare the query 
$query = mysqli_prepare($dbConnection, "INSERT INTO `table` (`1`, `2`, `3`) VALUES (?, ?, ?)"; 

// bind parameters; 2nd parameter is for data-types 
mysqli_stmt_bind_param($query, "sss", $_POST[1], $_POST[2], $_POST[3]); 

// execute query 
if (mysqli_stmt_execute($query)) { 
    echo "Successfully inserted " . mysqli_affected_rows($dbConnection) . " row"; 
} else { 
    echo "Error occurred: " . mysqli_error($dbConnection); 
}