簡體   English   中英

選擇和插入數據時保護php和sql

[英]Secure php and sql when selecting and inserting data

我有一個應用程序,該應用程序從MySQL數據庫中獲取數據並向其中插入數據(用戶正在編寫要插入的數據),說實話,我對php還是很陌生,對字符串的保護和清理不了解很多,我想要使php文件更安全,而且我不知道該按什么順序查找,如果有人可以發送教程,那就太好了。

這是選擇和插入代碼

    <?php
header('Content-Type: text/html; charset=utf-8');

    $db = "*********";
    $username = "*********";
    $password = "*******";
    $host = "************";

$sql = "select * from sample;";


$conn = mysqli_connect($host,$username,$password,$db);

$conn->set_charset('utf8');




$result = mysqli_query($conn,$sql);

$response = array();

while($row = mysqli_fetch_array($result))
{
    array_push($response,array($row[0],$row[1],$row[2]));
}
$str = json_encode(array($response),JSON_UNESCAPED_UNICODE);
$str = clean($str);
echo $str;
mysqli_close($conn);


function clean($string) {
    $string = str_replace(' ', ' ', $string);
    $string = preg_replace('/[^a-zA-Z0-9,×-×–, : . -]/', '', $string);
    return preg_replace('/-+/', '-', $string);
}

?>

和插入:

<?php

    $db = "*********";
    $username = "*********";
    $password = "*******";
    $host = "************";
$conn = mysqli_connect($server_name,$mysql_username,$mysql_password,$db_name);


$name =$_POST["name"];
$publisher=$_POST["publisher"];
$date=$_POST["date"];


$sql_query = "insert into sample(name,publisher,date)
             values('$name','$publisher','$date');";

if(mysqli_query($conn,$sql_query))
{
echo "data inserted";
}
else
{
echo "error";
}
?>

隨時使用准備好的語句:

$sql_query = "insert into sample(name,publisher,date) values(?,?,?);";

$stmt = mysqli_prepare($conn,$sql_query);

mysqli_stmt_bind_param( $stmt , "sss" , $name,$publisher,$date);

mysqli_stmt_execute($stmt);

並嘗試僅使用對象樣式,而不使用mysqli擴展的過程。

您在這里混合兩者:

$conn = mysqli_connect($host,$username,$password,$db);//procedural style

$conn->set_charset('utf8');//oject style

您可以使用PDO。 構建安全的SELECT和INSERT查詢非常簡單。 雖然,您必須小心某些命令,例如ORDER BY。

<?php

$pdo = new PDO('mysql:host=localhost;dbname=databasename;charset=utf8', 'username', 'password');
$statement = $pdo->prepare("SELECT * FROM users WHERE firstname = :firstname AND lastname = :lastname");
$statement->execute(array(':firstname' => 'Max', ':lastname' =>  'Mustermann'));  

if( $statement->rowCount() > 0 ) { 
   $row = $statement->fetch();
   echo "Hello " . $row['firstname'];
}

?>

也可以使用Mysqli,但是請簽出mysqli_real_escape_string。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM