簡體   English   中英

致命錯誤:在字符串上調用成員函數bindParam()

[英]Fatal error: Call to a member function bindParam() on string

我有一個數據庫,其中有一個名為用戶的表和一個名為名稱的字段。 我有以下HTML代碼:

 <form action="change.php?link=edit" method="post">
        <input type="text" name="name" id="name" class="lg" value="">
        <input type="submit" name="sub" value="Save changes">
    </form>

這個PHP代碼使用用戶在輸入中輸入的內容來更新名稱字段:

  if(isset($_POST['sub'])) {
    if (!empty($_POST['name'])) {
       $name= $_POST['name'];
       $id=$_SESSION['id'];
       $sql = "UPDATE users SET name=:name WHERE id=$id";
       $sql->bindParam(":name", $name);
       $consulta = $db->prepare($sql);
       $result = $consulta->execute();
    }
  }
}

該代碼給我錯誤“致命錯誤:在字符串上調用成員函數bindParam()”,但是,如果我將PHP代碼更改為:

$sql = "UPDATE users SET name='$name' WHERE id=$id";

並注釋一行:

//$sql->bindParam(":name", $name);

我沒有錯誤。 但是我知道這是一種不好的編程習慣,因為該代碼容易受到sql注入的攻擊。 我該如何解決這個問題?

那是一個有趣的錯誤消息。 您應該可以通過刪除單引號來解決此問題:

   $sql = "UPDATE users SET name = :name WHERE id = :id";

PHP / SQL已經知道參數的類型。 單引號是不必要的。

注意:您還應該使:id為參數。

變化:

$sql = "UPDATE users SET name=:name WHERE id=$id";
$sql->bindParam(":name", $name);
$consulta = $db->prepare($sql);

$sql = "UPDATE users SET name=:name WHERE id=:id";
$consulta = $db->prepare($sql);
$consulta->bindParam(":name", $name, PDO::PARAM_STR);
$consulta->bindParam(":id", $id, PDO::PARAM_INT);

暫無
暫無

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

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