2017-08-19 68 views
0

我有一個數據庫,其中有一個名爲users的表和一個名爲name的字段。我有以下的HTML代碼:致命錯誤:調用成員函數bindParam()字符串

<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注入的影響。我怎麼能解決這個問題?

+2

取下單引號arount'':name''。系統已經知道它是一個字符串。 –

回答

1

變化:

$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); 
+0

現在有效,非常感謝! :) – kalia

1

這是一個有趣的錯誤消息。您應該可以通過刪除單引號來修復它:

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

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

注意:您也應該使:id成爲一個參數。

+0

謝謝,我已經刪除了他們,但我一直得到相同的錯誤。 – kalia

相關問題