Php sql字符串中的反勾号不正确
我正在使用Jamie Rumbollow的MY_模型,需要添加一个函数,以便它包含一些额外的数据 我看到了这篇文章,它帮助我找到了实现这一点所需要的东西,但我遇到了一个SQL错误。有什么问题吗 错误号码:1064 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 从(Php sql字符串中的反勾号不正确,php,sql,codeigniter,activerecord,Php,Sql,Codeigniter,Activerecord,我正在使用Jamie Rumbollow的MY_模型,需要添加一个函数,以便它包含一些额外的数据 我看到了这篇文章,它帮助我找到了实现这一点所需要的东西,但我遇到了一个SQL错误。有什么问题吗 错误号码:1064 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 从(标题)加入标题上的用户创建者id= 用户第2行的用户id 当我使用Jamie的MY_模型时,我使用以下代码 // In controller $pages = $this->pages->
标题
)加入标题
上的用户
创建者id
=
用户
第2行的用户id
当我使用Jamie的MY_模型时,我使用以下代码
// In controller
$pages = $this->pages->with_creator()->get_all();
// In Model
class Pages_m extends MY_Model
{
public $_table = 'pages';
public $primary_key = 'page_id';
public function with_creator()
{
$this->db->join('users', 'pages.creator_id = users.user_id');
$this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE);
return $this;
}
}
现在它只包含创建索引,不包含来自页面本身的任何数据。您的查询在错误的位置上有一个反勾号。修正如下:
SELECT CONCAT_WS(' ', `users`.`first_name`, `users`.`last_name`) AS creator
FROM (`titles`) JOIN `users` ON `titles`.`creator_id` = `users`.`user_id`
您的查询在错误的位置有一个反勾号。修正如下:
SELECT CONCAT_WS(' ', `users`.`first_name`, `users`.`last_name`) AS creator
FROM (`titles`) JOIN `users` ON `titles`.`creator_id` = `users`.`user_id`
这是CodeIgniter的活动记录/查询生成器本身的一个bug。这与杰米的基本模型无关。出现此错误的原因是
SELECT
字符串使用explode()
分解,逗号作为分隔符。由于函数中有逗号,因此在某些情况下会产生一些错误
您有两个选择:
SELECT
调用。您可以通过两种方式执行此操作:$this->db->select(array("CONCAT_WS(' ', users.first_name, users.last_name) AS creator"));
转义参数:
$this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE);
当此缺陷变得稳定时,应在CI 3.0中更正此缺陷。它还没有在开发版本中修复,但问题是已知的,只需要解决并合并。如果您有任何反馈
选择问题:查询仅返回您的creator
concat结果,因为这就是您的全部请求。get\u all()
方法不会自动选择所有内容,这只是查询生成器的标准默认值。指定一个select()
调用后,它将使用该调用而不是默认的*
您应该修改
select()
(或添加另一个),以确保正确调用其他列。这是CodeIgniter的活动记录/查询生成器本身的一个错误。这与杰米的基本模型无关。出现此错误的原因是SELECT
字符串使用explode()
分解,逗号作为分隔符。由于函数中有逗号,因此在某些情况下会产生一些错误
您有两个选择:
SELECT
调用。您可以通过两种方式执行此操作:$this->db->select(array("CONCAT_WS(' ', users.first_name, users.last_name) AS creator"));
转义参数:
$this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE);
当此缺陷变得稳定时,应在CI 3.0中更正此缺陷。它还没有在开发版本中修复,但问题是已知的,只需要解决并合并。如果您有任何反馈
选择问题:查询仅返回您的creator
concat结果,因为这就是您的全部请求。get\u all()
方法不会自动选择所有内容,这只是查询生成器的标准默认值。指定一个select()
调用后,它将使用该调用而不是默认的*
您应该修改
select()
(或添加另一个)以确保其他列被正确调用。姓氏之后的第二个反勾号在正确的选项之外。我不确定为什么会这样。这是错误的。(认为可能是打字错误)这正是我正在使用的查询。没有输入错误。谁是杰米·鲁姆?姓后的第二个反勾在正确的括号之外。我不知道为什么会这样。这是错误的。(认为可能是打字错误)这正是我正在使用的查询。没有输入错误。谁是Jamie Rumbollow?$this->db->选择(“CONCAT_WS('',users.first_name,users.last_name')作为创建者);我还是遗漏了一些东西。现在你的姓后面只有一句话。他们必须匹配。在过去的一个小时里,我尝试了很多不同的事情。目前还没有解决方案。停止尝试,开始理解。我在回答中输入的查询在语法上是正确的。而且,如果Jamie Rumbelows my_Model从这些PHP调用生成SQL,那么其中就有一个严重的错误。$this->db->select(“CONCAT_WS('',users.first_name,users.last_name')作为创建者);我还是遗漏了一些东西。现在你的姓后面只有一句话。他们必须匹配。在过去的一个小时里,我尝试了很多不同的事情。目前还没有解决方案。停止尝试,开始理解。我在回答中提出的查询在语法上是正确的。而且,如果Jamie Rumbelows my_Model从这些PHP调用生成SQL,那么其中有一个严重的错误。不过,这还有一个额外的问题。查看编辑。对不起,不确定您指的是什么。我没有看到任何新内容。您正在覆盖查询的SELECT
部分。请参阅我的编辑。您需要在select()
中指定其他列,或者是您已经在CONCAT
中使用的列,或者是在其他地方添加另一列。因此,我应该创建另一个名为get\u title\u data的函数,并为此执行select语句。不过,这还有一个问题。查看编辑。对不起,不确定您指的是什么。我没有看到任何新内容。您正在覆盖查询的SELECT
部分。请参见我的编辑。您需要在select()中指定其他列