【问题标题】:PHP Codeigniter: SQL syntax error `WHERE username = $username`PHP Codeigniter:SQL 语法错误`WHERE username = $username`
【发布时间】:2017-02-14 17:41:30
【问题描述】:

我尝试将$username 添加到 MySQL 查询中,如下所示。但查询失败并出现 SQL 语法错误。

$username = $this->input->post('username');
$sql = "SELECT * FROM temp_user UNION SELECT * FROM member WHERE username = ".$username."";
$query = $this->db->query($sql);

这个查询有什么问题?

这里是错误信息错误号:1064

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

SELECT * FROM temp_user UNION SELECT * FROM member WHERE username =

Filename: C:/xampp/htdocs/dex/system/database/DB_driver.php

Line Number: 691

【问题讨论】:

  • 可能是单引号问题? ... username = '".$username."'.....。这两个表是否共享相同数量的列?
  • 不工作抱歉。我不知道。 Codeigniter 可以使用联合吗?
  • temp_usermember 表中有多少列?
  • 临时用户 6 列和成员 5 列
  • 好了好了。那会是什么样的变异结果集!

标签: php mysql sql codeigniter


【解决方案1】:

这样试试,不需要字符串拼接

$sql = "SELECT * FROM temp_user UNION SELECT * FROM member WHERE username = '$username'";

【讨论】:

  • 抱歉没有用。可能是codeigniter不能使用UNION?
  • 首先,codeigniter 和 union 查询没有相关性,当我在我的 sql 客户端上尝试此查询时,两个表上的 name 列具有相同数量的值,它正在工作。
  • 好的,我发现错误是星 * 不能与 union 一起使用
【解决方案2】:

SQL语法错误很可能是这部分造成的:

"... WHERE username = ".$username."";

你应该escape$username

那是

"... WHERE username = ".$this->db->escape($username);

其中$conn 是代表链接标识符的mysqli 对象。

【讨论】:

  • 好的,我发现错误是星 * 不能与 union 一起使用
【解决方案3】:

解决了!!!因为我不能使用星号(*)和联合

$sql = "SELECT username FROM temp_user WHERE username = '".$username."' UNION SELECT username FROM member WHERE username = '".$username."'";

【讨论】:

  • 你仍然需要转义$username,因为例如$username = "\'string",查询将失败。
猜你喜欢
  • 1970-01-01
  • 2021-06-15
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多