使用 phalcon 检查数据库中是不是存在电子邮件

Posted

技术标签:

【中文标题】使用 phalcon 检查数据库中是不是存在电子邮件【英文标题】:Check if email exists in database using phalcon使用 phalcon 检查数据库中是否存在电子邮件 【发布时间】:2019-07-13 06:14:57 【问题描述】:

我有以下代码:

<?php

use Phalcon\Mvc\Controller;
use Phalcon\Mvc\Model\Query;

class SignupController extends Controller

    public function indexAction()
    

    

    public function registerAction()
    


        $user = new Users();

        // Store and check for errors
        $success = $user->save(
            $this->request->getPost(),
            [
                "name",
                "email",
            ]
        );

        // Instantiate the Query
        $query = new Query(
            'SELECT email FROM users',
            $this->getDI()
        );

        // Execute the query returning a result if any
        $users = $query->execute();


        if($user==$users)
        
            echo "Email already exists";
        

        else if ($success)
        
            echo "Thanks for registering!";
         else
            
            echo "Sorry, the following problems were generated: ";

            $messages = $user->getMessages();

            foreach ($messages as $message) 
                echo $message->getMessage(), "<br/>";
            
        


        $this->view->disable();
    

我要做的是检查给定的电子邮件是否已在数据库中注册。

我试图用这部分代码做到这一点

// Instantiate the Query
        $query = new Query(
            'SELECT email FROM users',
            $this->getDI()
        );

        // Execute the query returning a result if any
        $users = $query->execute();


        if($user==$users)
        
            echo "Email already exists";
        

它似乎不起作用,我收到以下错误

"异常:无法从模型列表中获取模型的来源:'Users',准备时:SELECT email FROM users"

我的型号列表代码如下

<?php

use Phalcon\Mvc\Model;

class Users extends Model

    public $id;
    public $name;
    public $email;

谁能告诉我我做错了什么或者我想如何检查给定的电子邮件是否已经添加到数据库中,然后“回显”适当的消息。

提前感谢您的宝贵时间

最终工作代码

<?php

use Phalcon\Mvc\Controller;


class SignupController extends Controller

    public function indexAction()
    

    

    public function getSource()
    
        return 'users';
    




    public function registerAction()
    

        $user = new Users();

        $email = $this->request->getPost('email', 'string', '');
        $result = users::findFirst(
            [
                'conditions' => 'email = :email:',
                'bind' => [
                    'email' => $email,
                ]
            ]
        );

        if (false !== $result) 
            echo 'The email exists in the database';
         else 

            // Store and check for errors
            $success = $user->save(
                $this->request->getPost(),
                [
                    "name",
                    "email",
                ]
            );

            if ($success) 
                echo "Thanks for registering!";
             else 
                echo "Sorry, the following problems were generated: ";

                $messages = $user->getMessages();

                foreach ($messages as $message) 
                    echo $message->getMessage(), "<br/>";
                
            


            $this->view->disable();
        
    

【问题讨论】:

我不熟悉 phalcon,但您的查询中似乎没有 WHERE 子句。 SELECT email FROM users 将选择所有电子邮件。你想寻找一个特定的——比如SELECT email FROM users WHERE email = :email,然后绑定你正在寻找的电子邮件的值。 @AlexHowansky 看起来不错,我试过了,但现在给我 "Exception: Scanner: Unknown opcode 58" 。 PS:对 phalcon 也不熟悉,我正在努力学习它:P 【参考方案1】:

对于您的错误,您需要告诉模型它映射到哪个表:

public function getSource()

    return 'users';

更简单的方法是在模型上使用findFirst,如下所示:

$email  = $this->request->getPost('email', 'string', '');
$result = Users::findFirst(
    [
        'conditions' => 'email = :email:',
        'bind'       => [
            'email' => $email,
        ]
    ]
);

if (false !== $result) 
    echo 'The email exists in the database';

以上代码的作用: - 从发布的数据中获取email。将其消毒为字符串。如果尚未发布,则返回一个空字符串 - 在Users 模型中搜索email 字段的任何记录中存在的电子邮件。 - 如果没有返回任何内容,则继续,如果找到匹配项,则将结果回显。

【讨论】:

那是因为你的逻辑错了。当有人注册时,您首先必须检查他们的电子邮件是否存在并输出正确的消息。如果它不存在,那么您需要保存记录和电子邮件。您只需要更改步骤即可。

以上是关于使用 phalcon 检查数据库中是不是存在电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 检查电子邮件是不是真实 [关闭]

如何远程验证电子邮件或检查电子邮件是不是存在

如何检查MySQL中是不是存在一行? (即检查电子邮件是不是存在于 MySQL 中)

如何检查MySQL中是不是存在行? (即检查电子邮件是不是存在于 MySQL 中)

检查数据库中是不是已存在电子邮件地址

检查jquery中是不是存在电子邮件