Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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 sql字符串中的反勾号不正确_Php_Sql_Codeigniter_Activerecord - Fatal编程技术网

Php sql字符串中的反勾号不正确

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->

我正在使用Jamie Rumbollow的MY_模型,需要添加一个函数,以便它包含一些额外的数据

我看到了这篇文章,它帮助我找到了实现这一点所需要的东西,但我遇到了一个SQL错误。有什么问题吗

错误号码:1064

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 从(
标题
)加入
标题
上的
用户
创建者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()中指定其他列