我想使用md5函数在php中加密密码,但出现错误。
致命错误:未捕获错误:....(行)不在对象上下文中时使用$ this
我从this link跟进了此代码,但这是错误的。我试图在stackoverflow上搜索类似的问题,但没有找到与我相同的情况。这是我的代码。有人可以帮助我吗?
发现错误的行。 $this->stmt = $this->pdo->prepare($sql);
这是我的代码
<?php
require_once('connect01.php');
function addUser($name, $password){
$hash = md5($password);
$sql = "INSERT INTO `user` (`username`, `pass`) VALUES ('$name','$password')";
$this->stmt = $this->pdo->prepare($sql);
return $this->stmt->execute([$name, $hash]);
}
if(isset($_POST['submit'])){
addUser($_POST['username'], $_POST['pass']);
}
?>
答案 0 :(得分:1)
$this
在类之外不是特别有用。 learn about classes后,您可以返回找到的站点。
如果要使用addUser()
,则需要一个类,其中$pdo
类属性是PDO类的实例,而$statement
类属性是一个实例PDOStatement
The previous page向您展示了一个名为database.php
的脚本,其中包含DB
类,这是model-view-controller设计模式下的模型。符合上述要求。
最直接的启动和运行方法是在脚本中添加DB
类定义,并将addUser()
的函数定义放入其中。
设置完成后,一旦您了解了inheritance,就可以考虑将DB
类保留在脚本中,但保留原来的样子,没有addUsers()
。如果您extends
,仍可以使用并添加到其中:
class User extends DB
{
function addUser($name, $password)
{
$hash = md5($password);
$sql = "INSERT INTO `user` (`username`, `pass`) VALUES ('$name','$password')";
$this->stmt = $this->pdo->prepare($sql);
return $this->stmt->execute([$name, $hash]);
}
}
请记住,如果选择此方法,则需要将DB::$pdo
和DB::$stmt
从private
更改为protected
:
class DB
{
protected $pdo = null;
protected $stmt = null;
/* keep the rest of the class the same */
这是因为private
类的属性不能被扩展第一个类的类使用(“可见”),而protected
类的属性却可以使用。这是称为visibility的概念的一部分。