0

您好,我正在使用以下代码更新密码,但我需要选择我应该在我的 SQL 查询中更新哪些用户,如果我将数字作为 23 之类的 id 输入,则有一个 WHERE 子句它正在工作,但我希望这个 id 来自POST 方法也从表单中发布 id,这是此版本中的代码,它给了我一个错误:

`SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens`

这是这里的代码

   <?php


class Users {
public $password = null;
public $salt = "Zo4rU5Z1YyKJAASY0PT6EUg7BBYdlEhPaNLuxAwU8lqu1ElzHv0Ri7EM6irpx5w";

public function __construct( $data = array() ) {
if( isset( $data['id'] ) ) $this->id = stripslashes( strip_tags( $data['id'] ) );
if( isset( $data['password'] ) ) $this->password = stripslashes( strip_tags( $data['password'] ) );
}


public function storeFormValues( $params ) {
//store the parameters
$this->__construct( $params );
}


public function register() {
$correct = false;
try {
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "Update users SET password = :password WHERE userID = :id";

$stmt = $con->prepare( $sql );
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
$stmt->execute();



 return "Registration Successful <br/> <a href='index.php'>Login Now</a>";
       }catch( PDOException $e ) {
                 return $e->getMessage();
       }
}
}


?>

所以问题是如何把发布的 WHERE userID= :id;

4

2 回答 2

3

你永远不会为:id. 你需要类似的东西

$stmt->bindValue(':id', $_POST['id']);
于 2013-10-21T21:12:12.447 回答
0

你忘记bindValue()id

$stmt->bindValue( "id",...);

编辑:我知道Marc B答案是第一个,但我只是回答,因为被John Siniger要求写答案

于 2013-10-21T21:25:37.460 回答