关闭

原生php mysql 查询出数组,为什么只查询出一条数据,封装的phpmysql类

标签: mysql
239人阅读 评论(0) 收藏 举报
分类:

用框架多了, 很多原生的php查询数据库不熟悉,最近来复习一下原生的phpmysql的类

<?php
/**
 * MYSQL 操作类
 * @author yht_0616@126.com
 */
class Mysql {  

    private $debug = false;     //true 打开数据库调试模式 false关闭数据库调试模式

    private $version = "";     

    private $link_id = NULL;

    /**
     * 连接数据库
     *
     * param  string  $dbhost       数据库主机名<br />
     * param  string  $dbuser       数据库用户名<br />
     * param  string  $dbpw         数据库密码<br />
     * param  string  $dbname       数据库名称<br />
     * param  string  $dbcharset    数据库字符集<br />
     * param  string  $pconnect     持久链接,1为开启,0为关闭
     * return bool
     **/
    function connect($dbhost, $dbuser, $dbpwd, $dbname = '', $dbcharset = 'utf8', $pconnect = 0) {
        if ($pconnect) {
            if (! $this->link_id = mysql_pconnect ( $dbhost, $dbuser, $dbpwd )) {
                $this->ErrorMsg ();
            }
        } else {
            if (! $this->link_id = mysql_connect ( $dbhost, $dbuser, $dbpwd, 1 )) {
                $this->ErrorMsg ();
            }
        }
        $this->version = mysql_get_server_info ( $this->link_id );
        if ($this->getVersion () > '4.1') {
            if ($dbcharset) {
                mysql_query ( "SET character_set_connection=" . $dbcharset . ", character_set_results=" . $dbcharset . ", character_set_client=binary", $this->link_id );
            }

            if ($this->getVersion () > '5.0.1') {
                mysql_query ( "SET sql_mode=''", $this->link_id );
            }
        }
        if (mysql_select_db ( $dbname, $this->link_id ) === false) {
            $this->ErrorMsg ();
        }
    }

    /**
     * 插入数据
     *
     * @param string $table         表名<br />
     * @param array $field_values   数据数组<br />
     * @return id                   最后插入ID
     */
    function save($table, $field_values) {
        $fields = array ();
        $values = array ();
        $field_names = $this->getCol('DESC '.$table);

        foreach ( $field_names as $value ) {
            if (array_key_exists ( $value, $field_values ) == true) {
                $fields [] = $value;
                $values [] = "'" . $field_values [$value] . "'";
            }
        }
        if (!empty($fields)) {
            $sql = 'INSERT INTO '.$table.' ('.implode(',',$fields).') VALUES ('.implode ( ',',$values ).')';
            if($this->query ($sql)){
                return $this->getLastInsertId ();
            }
        }
        return false;
    }
    /**
     * 获取最后插入数据的ID
     */
    function getLastInsertId() {
        return mysql_insert_id ( $this->link_id );
    }
    /**
     * 更新数据
     *
     * @param string $table         要更新的表<br />
     * @param array $field_values   要更新的数据,使用而为数据例:array('列表1'=>'数值1','列表2'=>'数值2')
     * @param string $where         更新条件
     * @return bool
     */
    function update($table, $field_values, $where = '') {
        $field_names = $this->getCol ( 'DESC ' . $table );
        $sets = array ();
        foreach ( $field_names as $value ) {
            if (array_key_exists ( $value, $field_values ) == true) {
                $sets [] = $value . " = '" . $field_values [$value] . "'";
            }
        }
        if (! empty ( $sets )) {
            $sql = 'UPDATE ' . $table . ' SET ' . implode ( ', ', $sets ) . ' WHERE ' . $where;
        }
        if ($sql) {
            return $this->query ( $sql );
        } else {
            return false;
        }
    }

    /**
     * 删除数据
     *
     * @param string $table 要删除的表<br />
     * @param string $where 删除条件,默认删除整个表
     * @return bool
     */
    function delete($table,$where=''){
        if(empty($where)){
            $sql = 'DELETE FROM '.$table;
        }else{
            $sql = 'DELETE FROM '.$table.' WHERE '.$where;
        }
        if($this->query ( $sql )){
            return true;
        }else{
            return false;
        }
    }
    /**
     * 获取数据列表
     *
     * @param string $sql   查询语句
     * @return array        二维数组
     */
    function findAll($sql) {
        $res = $this->query ( $sql );
        if ($res !== false) {
            $arr = array ();
            $row = mysql_fetch_assoc ( $res );
            while ($row) {
                $arr [] = $row;
                $row = mysql_fetch_assoc ( $res );
            }
            return $arr;
        } else {
            return false;
        }
    }
    /**
     * 获取数据列表
     *
     * @param string $sql   查询语句<br />
     * @param int $numrows  返回个数<br />
     * @param int $offset   指定偏移量
     * @return array        二维数组
     */
    function selectLimit($sql, $numrows=-1, $offset=-1) {
        if($offset==-1){
            $sql .= ' LIMIT ' . $numrows;
        }else{
            $sql .= ' LIMIT ' . $offset . ', ' . $numrows;
        }
        return $this->findAll( $sql );
    }

    /**
     * 获取一条记录
     *
     * @param string $sql   查询语句
     * @return array        一维数组
     */
    function find($sql) {
        $res = $this->query ( $sql );
        if ($res !== false) {
            return mysql_fetch_assoc ( $res );
        } else {
            return false;
        }
    }

    /**
     * 返回查询记录数
     *
     * @return int
     */
    function getRowsNum($sql) {
        $query = $this->query ( $sql );
        return mysql_num_rows ( $query );
    }
    /**
     * 返回查询的结果的第一个数据
     *
     * @return string
     */
    function getOneField($sql){
        $val = mysql_fetch_array($this->query ( $sql ));
        return $val[0];
    }

    /**
     * 获取列
     *
     * @param string $sql
     * @return array
     */
    function getCol($sql) {
        $res = $this->query( $sql );
        if ($res !== false) {
            $arr = array ();
            $row = mysql_fetch_row ($res);
            while ($row) {
                $arr [] = $row [0];
                $row = mysql_fetch_row ($res);
            }
            return $arr;
        } else {
            return false;
        }
    }

    /**
     * 发送一条 MySQL指令
     *
     * @param string $sql
     * @return bool
     */
    function query($sql) {
        $sql=str_replace('xxxx_db_',DB_PREFIX, $sql);//xxxx_db   sql语句中将xxxx_db替换成db_prefix
        if ($this->debug) echo "<pre><hr>\n" . $sql . "\n<hr></pre>";//如果设置成调试模式,将打印SQL语句
        if (! ($query = mysql_query ( $sql, $this->link_id ))) {
            $this->ErrorMsg ();
            return false;
        } else {
            return $query;
        }
    }

    /**
     * 获取数据库版本信息
     */
    function getVersion() {
        return $this->version;
    }

    /**
     * 数据库调试
     */
    function debug(){
        $this->debug=true;
    }

    /**
     * 数据库报错处理
     */
    function ErrorMsg($message = '') {
        if (empty($message)) $message = @mysql_error ();
        exit ($message);
    }

    /**
     * 关闭数据库连接(通常不需要,非持久连接会在脚本执行完毕后自动关闭)
     */
    function close() {
        return mysql_close ( $this->link_id );
    }
}
?>
0
0
查看评论

mysql原生态简单操作数据库

mysql原生态简单操作数据库// 数据库连接 Connection connection = null; // 预编译的Statement,使用PreparedStatement提高数据库性能 PreparedStatement prepare...
  • mjy2012
  • mjy2012
  • 2015-06-15 20:33
  • 441

mybatis 查询 resultMap="" 只返回一条数据

在已确认sql没问题的情况下 检查查询的字段  是否与resultMap 标签中的参数相匹配 如下图修改前:
  • u012934723
  • u012934723
  • 2017-09-07 12:44
  • 743

mysql查询结果转换为PHP数组的几种方法的区别

mysql查询结果转换为PHP数组的几种方法的区别mysql查询结果转换为PHP数组的几种方法的区别$result = mysql_fetch_row():这个函数返回的是数组,数组是以数字作为下标的,你只能通过$result[0],$Result[2]这样的形式来引用。 $result ...
  • ttpage
  • ttpage
  • 2013-06-24 13:54
  • 1140

mysql 一对多 查询 出一行数据

select   *  from    class; select   *    from    student; class   id       na...
  • textalign
  • textalign
  • 2017-05-12 16:39
  • 3439

mybatis学习之一对多查询如何避免只查出一条数据

刚学习mybatis,在一对多的查询中遇到在查询多的一方永远只是查询到一天数据,明明在mysql数据库中有多条结果集,后来网上找到了答案,多的一方的主键不要和一的一方的主键名相同,参考的网址: http://www.oschina.net/question/154489_141658
  • chenchudongsg
  • chenchudongsg
  • 2015-04-15 14:57
  • 2229

(4)深坑之MyBatis只能查询一条记录

深坑描述 深坑原因 深坑解决 总结1 深坑描述      我数据库中有三张表,暂且记作 表A,表B,表C,他们之间的关系如下图所示:我创建的持久化类A:当我进行数据库查询的时候,执行的SQL语句是没有问题的,但是work和treatises两个集合总是只有一个数据(按理...
  • LoveCarpenter
  • LoveCarpenter
  • 2017-03-09 14:12
  • 1108

php查询到多条数据结果后,将每一条结果放入数组

PHP查询到的数据存放到数组里面,一般使用$arr[]=$row的方式实现,$row是mysql_fetch_array获得的一行数据,本身是一个数组,执行上面的语句之后,这一行会添加存放在额为数组$arr的最后。       ...
  • Huangwenting1990
  • Huangwenting1990
  • 2016-11-21 21:07
  • 1998

Spring data jpa findByItemid查询出同一个实体

问题:有一张表专门存放下拉框的选项,根据itemid来区分哪种类型。 比如通过findByItemid(“countrycode”)来查询国籍,下拉框显示同一个国家,查出来同一个国家。原因:具体原因不知,大概因为jpa是根据@id注解来居分不同实体的,我的是@Id注解的是itemid,itemid...
  • LY20170122
  • LY20170122
  • 2017-12-10 00:25
  • 53

PHP 数据库查询结果转换数组后进行再查询过滤

//filterArrays($category_result,array(array("col"=>"id","val"=>"49"),array("col"=>"bor...
  • soarheaven
  • soarheaven
  • 2016-06-13 20:45
  • 2126

sql查询-多条数据相同,取其中一条

(说明,参考的网上的文章,自己做了测试) 问题: 表1 学校 年级 班级 姓名 性别 年龄 1中 1 2班 张 男 20 --这个曲调 2中 3 1班 马 男 17 1中 2 2班 李 女 16 2中 3 5班 张 男 15 2中 3 6班 李 女 18 --
  • happy_ddm
  • happy_ddm
  • 2011-09-20 08:35
  • 7624
    个人资料
    • 访问:58453次
    • 积分:2326
    • 等级:
    • 排名:第18956名
    • 原创:174篇
    • 转载:14篇
    • 译文:0篇
    • 评论:7条
    点击添加博主QQ