Sqlx“缺少目标名称”,用于通过指针的struct标记

时间:2017-07-08 10:49:52

标签: go sqlx

我有一个这样的模型:

type Course struct {
    Name string `db:"course_name"`
}

type Group struct {
    Course *Course
}
type Groups []Group

当我尝试使用如下查询进行sqlx.Select for Groups时:

SELECT c.name as course_name FROM courses as c;

我得到了

  

* main.Groups

中缺少目的地名称course_name

错误。

此代码有什么问题?

3 个答案:

答案 0 :(得分:0)

当您选择多行并且想要将结果扫描到切片时需要使用sqlx.Get,就像查询一样,否则请使用Group作为单行。< / p>

此外,您无法直接扫描Course结构,因为它的所有字段都没有标记(与Course结构不同),course := Course{} courses := []Course{} db.Get(&course, "SELECT name AS course_name FROM courses LIMIT 1") db.Select(&courses, "SELECT name AS course_name FROM courses") 字段不是&# 39; t embedded。

尝试:

<?php include("header.php");
    include("classes/db.php");
    session_start();
    $username="";
    if(isset($_GET['username']))
    {
        $user=$_GET['username'];
        if("SELECT user_name FROM user_reg WHERE user_name='$user'")
        {
            $username="SELECT user_name FROM user_reg WHERE user_name='$user'";
            $run_username=mysqli_query($con,$username);
            $row=mysqli_fetch_array($run_username);
            $username=$row['user_name'];
        }
        else
        {
            die("User does nto exist");
        }
    }
    ?>

答案 1 :(得分:0)

我将Course *Course更改为Course Course - 没有效果。 当我像这样嵌入它时:

type Group struct {
    Course
}

它有效。

这也是有效的:

type Group struct {
    *Course
}

看起来sqlx除了嵌入字段之外什么都不懂。

答案 2 :(得分:0)

好的,所以当你使用带有Sqlx的嵌入式结构时,大小写很重要,至少在我的情况下是这样。

您需要在sql中引用嵌入式结构,如下所示:

select name as "course.name" from courses...

请注意course是小写的,命名涉及表和列之间的点/句点。

然后您的GetSelect应该可以正常使用。