Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 代码点火器,其中值位于(字段1,字段2)_Php_Mysql_Codeigniter - Fatal编程技术网

Php 代码点火器,其中值位于(字段1,字段2)

Php 代码点火器,其中值位于(字段1,字段2),php,mysql,codeigniter,Php,Mysql,Codeigniter,我需要在我的auth脚本中设置查询,在where子句中,我想在(Field1,Field2)中使用“\u我的POST\u值” 最终查询如下: 从“myprefix\u用户”中选择*WHERE'myemail@email.com'IN('EMAIL','LOGIN')和PASSWORD=SHA1('mypassword') 我尝试过这样做: $this->db->where("'" . mysql_escape_string($_POST['login']) . "' IN (EMAI

我需要在我的auth脚本中设置查询,在where子句中,我想在(Field1,Field2)中使用
“\u我的POST\u值”

最终查询如下:

从“myprefix\u用户”中选择*WHERE'myemail@email.com'IN('EMAIL','LOGIN')和PASSWORD=SHA1('mypassword')

我尝试过这样做:

$this->db->where("'" . mysql_escape_string($_POST['login']) . "' IN (EMAIL,LOGIN)", NULL, FALSE);
$this->db->where("PASSWORD=SHA1('" . mysql_real_escape_string($_POST['password']) . "')");
$userdb = $this->db->get('users');
..但CodeIgniter将前缀设置为我的登录/电子邮件值并发送错误:

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 ''test@test.com' IN (EMAIL,LOGIN) AND PASSWORD=SHA1('123')' at line 3

SELECT * FROM (`myprefix_users`) WHERE myprefix_'test@test.com' IN (EMAIL,LOGIN) AND PASSWORD=SHA1('123')
我需要在表名中使用db_前缀,但在我的WHERE子句中不需要它,即使->WHERE()中的第三个参数(FALSE)也不适用于我:(


如何解决我的问题?有什么想法吗?

首先,您不需要数据库语句中所有不必要的函数

为什么不:

$user = $_POST['user'];
$pass = sha1($pass);

$this->db->where("(email = '$user' OR username = '$user') AND password = '$pass'");
$query = $this->db->get('users');

您不必担心mysql escape,因为CodeIgniter类将自动为您转义它们。

尝试使用CodeIgniter的输入类。它将简化您的代码:

$login = $this->input->post('login', TRUE);
$password = $this->input->post('password', TRUE);
$this->db->where("'$login' IN ", "('EMAIL','LOGIN')", FALSE);
$this->db->where("PASSWORD", "SHA1('$password')", FALSE);
$userdb = $this->db->get('users');

您也可以使用custum查询:)实际上非常类似于这个问题:
是不好的解决方案,因为它会使请求变慢。了解
如何在MySQL引擎的底层工作。为什么我应该为变量分配内存,这将复制我的
$\u POST
变量?对不起,它使语法更亮了一点。您不需要复制变量。从上面的答案来看,使用输入类将对您有很大帮助。