Mysql语句 报错 "Unknown column ' ' in 'field list'"

Unknown column ' ' in 'field list,主要意思就是这个字段不存在,我查了查网上的信息,都是指数据表字段名前面有空格,或者一些别的看不见的符号,我仔细检查了字段名,发现字段名没有问题。最后发现我的问题主要出现在字段类型和添加的数据类型不一致

错误示范,username字段是varchar类型,而变量解析之后由于不带单引号,嗯,不知道变成什么鬼了,在PHP里面一般仍然可以当成字符串用,但是执行sql语句就不行了。

public function insert($username, $password)
{
   $this->sql = "insert into $this->table (username, password) values ($username, $password)";
        return $this;
}

正确示范,变量$username,执行sql语句还必须解析完了之后再主动跟他加一个单引号。

public function insert($username, $password)
{
        // 拼装sql语句,重点在于--->'".$username."' 
        $this->sql = "insert into $this->table (username, password) values ('".$username."', $password)";
}

下面跟问题基本没有关系了

<?php
/**
 * 对Mysqli的类进行二次封装
 */
class MysqliClass extends mysqli
{

    public $table;  //用来保存操作的表名称
    public $sql;    //保存要执行的sql语句
    private $action = 'other'; //当前sql执行的操作是什么,主要查询需要返回结果集

    // 封装Mysqli的构造函数
    public function __construct($dbname)
    {
        // 账号密码请仔细填写
        parent::__construct('localhost', 'root', 'root', $dbname);
        // 设置连接数据库的编码
        $this->set_charset('utf8');
    }


    // 查询数据
    public function select()
    {
        $this->action = 'select';
        $this->sql = "select * from $this->table";
        return $this;
    }


    // 封装一个添加数据方法
    public function insert($username, $password)
    {
        // 告知类将要执行修改操作
        $this->action = 'other';
        // 拼装sql语句,重点在于--->'".$username."' 
        $this->sql = "insert into $this->table (username, password) values ('".$username."', $password)";
        return $this;
    }


    // 删除数据
    public function delete($id)
    {
        $this->action = 'other';
        $this->sql = "delete from $this->table where id = $id";
        return $this;
    }  


    // 修改数据
    public function update($id, $username, $password)
    {
        $this->action = 'other';
        $this->sql = "update $this->table set username='".$username."', password=$password where id = $id";
        return $this;
    }



    // 之所以名称不用query是为了仍然可以使用mysqli类的query方法执行sql
    public function query2()
    {
        // 执行语句
        $result = $this->query($this->sql);

        // 判断用户是什么操作
        if ($this->action == 'select') {
            $data = [];
            // 解析查询数据
            foreach ($result as $key => $value) {
                $two_data = [];
                foreach ($value as $two_key => $two_value) {
                    $two_data[$two_key] = $two_value;
                }
                $data[$key] = $two_data;
            }
            return $data;
        } else {
            if($result) {
                return $result;
            } else {
                // 输出语句错误信息
                echo $this->error;
                return false;
            }
        }
    }
} 


// 建立与数据库的连接
$db = new MysqliClass('studymysqli');
// 设置要操作的表
$db->table = 'mysqli_class';


// 1. 查询数据
// $result = $db->select()->query2();
// var_dump($result);

// 2. 添加数据,用时间戳替代密码,用来判断是否成功添加
// $result = $db->insert('测试姓名', time())->query2();
// var_dump($result);

// 3. 修改数据, 
// 参数解释,唯一标识ID, 用户名称username, 用户密码password
// $result = $db->update(2, '修改用户名称', time())->query2();
// var_dump($result);

// 4. 删除数据
// $result = $db->delete(6)->query2();
// var_dump($result);


$db->close();
?>


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,774评论 0 4
  • 一. Java基础部分.................................................
    wy_sure阅读 3,854评论 0 11
  • MySQL数据库 非关系型数据库的优势: 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不...
    riverstation阅读 935评论 0 0
  • 库表设计 库名、表名、字段名使用小写字母,”_”分割,不超过18 个字符,使用名词且见名知意. 不使用temp、o...
    迷途的华生阅读 1,036评论 0 10
  • 未来是未知的,也是不可预测的。这个世界上有两种人,一种是无知的,还有一种是不知道自己是无知的。正如古人所说:知不知...
    心明_e18e阅读 922评论 0 1