簡體   English   中英

mysqli_real_escape_string不會插入到db中

[英]mysqli_real_escape_string doesn't insert into db

我提出以下問題...我必須確保以下查詢也接受帶有引號的值..我嘗試使用mysqli_real_escape_string但它不起作用..我附加了我的嘗試..

1°在發布期間放置功能

        $idCantiere = $_POST["idCantiere"];
        $nomeCantiere = mysqli_real_escape_string($_POST["nomeCantiere"]);
        $sql = "INSERT INTO Cantiere( 
        idCantiere,
        nomeCantiere)
        VALUES(
       '$idCantiere',
       '$nomeCantiere')";
        if (mysqli_query($mysqli, $sql)) 
        {
        echo "<script type='text/javascript'>alert('Cantiere Inserto'); 
        </script>";
        } else
        {
         echo "Error: " . $sql . "" . mysqli_error($mysqli);
        }

2°在查詢期間放置功能

 $idCantiere = $_POST["idCantiere"];
        $nomeCantiere = $_POST["nomeCantiere"];
        $sql = "INSERT INTO Cantiere( 
        idCantiere,
        nomeCantiere)
        VALUES(
       '$idCantiere',
       mysqli_real_escape_string('$nomeCantiere'))";
        if (mysqli_query($mysqli, $sql)) 
        {
        echo "<script type='text/javascript'>alert('Cantiere Inserto'); 
        </script>";
        } else
        {
         echo "Error: " . $sql . "" . mysqli_error($mysqli);
        }

我該如何解決這個問題?

刪除mysqli_real_escape_string()並使用簡單的預處理語句並防止sql注入。

<?php

    $idCantiere = isset($_POST['idCantiere']) ? $_POST['idCantiere'] : null;
    $nomeCantiere = isset($_POST['nomeCantiere']) ? $_POST['nomeCantiere'] : null;


        $sql = $mysqli->prepare("INSERT INTO Cantiere (idCantiere,nomeCantiere) VALUES(?.?)");
        $sql->bind_param("is",$idCantiere,$nomeCantiere);

        if($sql->execute()){

           //success message
        }else{

            //return error
        }


?>

預准備語句是用於以高效率重復執行相同(或類似)SQL語句的功能。

准備好的語句基本上是這樣的:

准備:創建SQL語句模板並將其發送到數據庫。 某些值未指定,稱為參數(標記為“?”)。 示例:INSERT INTO MyGuests VALUES(?,?,?)數據庫在SQL語句模板上解析,編譯和執行查詢優化,並存儲結果而不執行它執行:稍后,應用程序將值綁定到參數,數據庫執行語句。 應用程序可以根據需要多次執行語句,使用不同的值與直接執行SQL語句相比,預准備語句有三個主要優點:

准備語句減少了解析時間,因為查詢的准備只進行一次(盡管語句執行多次)綁定參數最小化了服務器的帶寬,因為您每次只需要發送參數,而不是整個查詢Prepared語句非常對SQL注入有用,因為以后使用不同協議傳輸的參數值無需正確轉義。 如果原始語句模板不是從外部輸入派生的,則不能進行SQL注入。

您必須將連接變量作為第一個參數Eg傳遞:

$con=mysqli_connect("localhost","my_user","my_password","my_db");
$age = mysqli_real_escape_string($con, $_POST['age']);

結帳文檔了解更多詳情。 http://php.net/manual/en/mysqli.real-escape-string.php

你在函數mysqli_real_escape_string($con,$sql);中缺少一個參數mysqli_real_escape_string($con,$sql);

您可以嘗試用php替換引號

$nomeCantiere = $_POST["nomeCantiere"];
str_replace("'", "''", $nomeCantiere );

如果你插入2個引號('')而不是一個mysql將只在1個引號中放入該值

在插入帖子之前將參數傳遞給mysqli_real_escape_string()函數是錯誤的,必須放置用於訪問數據庫的連接字符串

$connection=mysqli_connect("localhost","USER","PASSWORD","DB");
$nomeCantiere= mysqli_real_escape_string($connection, $_POST['nomeCantiere']); 

你的第二次嘗試是錯誤的,在帖子中重用我的第一行代碼

暫無
暫無

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

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