[英]Fatal error: Uncaught Error: Call to a member function bindParam() on string i
[英]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.