代码点火器SQL构建

代码点火器SQL构建,sql,codeigniter,Sql,Codeigniter,我正在开发“发送我的密码”类型的功能,要么我的sql不好,要么我的codeigniter不好。表单验证得很好,调用了模型中的函数,但没有返回任何结果。我必须检查两个表中提交的电子邮件地址,因为我们将用户和管理员帐户分为两个表 控制器代码: public function send() { $this->load->library('form_validation'); $this->form_validation->set_rules('email',

我正在开发“发送我的密码”类型的功能,要么我的sql不好,要么我的codeigniter不好。表单验证得很好,调用了模型中的函数,但没有返回任何结果。我必须检查两个表中提交的电子邮件地址,因为我们将用户和管理员帐户分为两个表

控制器代码:

 public function send() {
    $this->load->library('form_validation');
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim');
    $this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');

    if ($this->form_validation->run()) {
        // Check For A Matching Email
        $this->load->model('signin_model');
        if ($this->signin_model('email_verify')) {

            // There Was A Match
            echo "THERE WAS A MATCH";
        } else {

            // No Match
            echo "NO MATCH";
        }

    } else {

        // Form Did Not Validate
        $this->load->view('signin/forgot');
    }
}
错误:

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

SELECT * FROM admin, staff WHERE staff_email = 'dsfsdf@test.com' OR admin_email = 
更新:我现在使用的固定查询是:

$sql = "SELECT admin_id, first_name FROM admin WHERE admin_email = ? UNION SELECT staff_id, first_name FROM staff WHERE staff_email = ?";

$this->signin\u model
不是一个函数。它是一个物体。要调用模型函数,请将函数作为对象的属性调用:

$this->signin_model->email_verify()

EDIT
$this->db->query
的第二个参数应该是数组

$query = $this->db->query($sql, array($email, $email));
编辑2:如果这两个表之间没有链接,则加入
将对您没有帮助。您可以尝试使用
联合

$sql = "SELECT * FROM staff WHERE staff_email = ? ".
    "UNION ALL SELECT * FROM admin WHERE admin_email = ?";

试试看。应该修复SQL错误

谢谢。错过了那件事我觉得很傻。我现在得到一个SQL错误,但我认为这与管理员电子邮件不是staff表中的字段有关。我是否需要将其分为两个查询,或者是否有更好的方法形成这一个查询?SQL错误是什么?您应该能够在一个查询中执行此操作。
$this->db->query
的第二个参数应该是一个数组。谢谢。我得到了工作的机会。我将最初的问题编辑为工作代码。我必须指定要拉什么,因为这两个表的列数不同。这修复了错误,但现在有效和无效电子邮件都显示不匹配。在
admin
staff
表之间是否有任何链接?如果有的话,您需要将其添加到
的WHERE
中。如果没有,则需要使用2个查询或一个
联合
。它们之间没有链接。我会调查工会的选择。
$sql = "SELECT * FROM staff WHERE staff_email = ? ".
    "UNION ALL SELECT * FROM admin WHERE admin_email = ?";
 $query = $this->db->query($sql, array($email, $email));