不能在类外调用 PDO 中的函数
Posted
技术标签:
【中文标题】不能在类外调用 PDO 中的函数【英文标题】:Can't call a function in PDO outside the class 【发布时间】:2017-01-23 02:47:48 【问题描述】:我想使用 PDO 在 php 中创建一个登录页面,并且我创建了这个类,其中包括用于登录的函数 login。
<? php
class Utente
private $db;
function __construct($conn)
$this - > db = $conn;
public static
function login($nome_utente, $password)
$nome_utente = $_POST['nome_utente'];
$password = $_POST['password'];
if ($nome_utente == '')
echo "Fill the name";
try
$stmt = $this - > db - > prepare("SELECT * FROM utente WHERE nome_utente = :nome_utente AND password=:password");
$stmt - > execute();
$utenteRow = $stmt - > fetch(PDO::FETCH_NUM);
if ($utenteRow > 0)
echo "You are logged in";
else echo "The username doesnt match with the password!";
catch (PDOException $e)
echo $e - > getMessage();
?>
<!-- begin snippet: js hide: false console: true babel: false -->
<form action="" method="POST">
Name
<input type="text" name="nome_utente" />PAS
<input type="text" name="password" />
<input type="submit" name="submit" value="login" />
</form>
现在我想调用这个函数来查看登录结果。我在另一个php文件中创建这个新类来调用它:
<?php
class Call
public function call()
$var=Utente::login();
return $var;
?>
问题是当我使用类调用执行 secon 文件时,我看到一个空白页。我做错了什么吗?有人可以告诉我如何以正确的方式登录用户吗?谢谢!
【问题讨论】:
尝试将- >
更改为->
,那里没有空格。
【参考方案1】:
你创建的不是一个类,而是一个函数。类的使用方式不同。
class Utente
private $db;
function __construct($conn)
$this->db = $conn;
public function login($nome_utente, $password)
$stmt = $this->db->prepare("SELECT * FROM utente WHERE nome_utente = ?");
$stmt->execute([$nome_utente]);
$row = $stmt->fetch();
if ($row && password_verify($password, $row['password'])
return $row;
那你就得这样用
$utente = new Utente($db);
$var = $utente->login($_POST['nome_utente'], $_POST['password']);
if (!$var)
echo "The username doesnt match with the password!";
但这对你来说可能太复杂了,所以你最好暂时忘记类并坚持使用函数
【讨论】:
嗯,OP 的代码有很多错误,但这可能是需要修复的第一件事...... @YourCommonSense +1 @YourCommonSense 密码验证功能在哪里? @Doee 你可以查看其他答案中的链接 @YourCommonSense 好的,谢谢。 utente 类的对象:$utente = new Utente($db);我必须在另一个类中创建吗?【参考方案2】:主要问题是您没有存储状态:登录脚本完成后,没有设置/更改任何内容,因此在下一个请求时服务器不知道有登录用户。
成功登录后,您应该将状态存储在例如session 变量中。然后,您可以在启动脚本时检查是否设置了该会话变量以及值是什么。
除此之外,您永远不应该存储纯文本密码,例如参见How can I store my users' passwords safely?
关于你的最后一个脚本/课程。你在哪里使用它?另请注意,login()
方法不返回任何内容,因此$var
将为空。
编辑:顺便说一句,您应该在调用 Utente::login()
方法时向它发送 2 个参数,或者从方法定义中删除这些参数,因为无论如何您都不使用它们。
【讨论】:
以上是关于不能在类外调用 PDO 中的函数的主要内容,如果未能解决你的问题,请参考以下文章