加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

这个PHP如何知道要使用哪个数组键/值?

发布时间:2020-12-13 17:02:26 所属栏目:PHP教程 来源:网络整理
导读:下面是其他人编写的 PHP数据库类的一部分,我已经删除了大约80%的代码,我的问题的所有不相关的代码都被删除了,只剩下的数量允许我测试这个类而不实际打到一个真正的数据库 这个类有几个方法可以让你设置一个键并对其进行赋值,然后使用数组将其转换为mysql UP
下面是其他人编写的 PHP数据库类的一部分,我已经删除了大约80%的代码,我的问题的所有不相关的代码都被删除了,只剩下的数量允许我测试这个类而不实际打到一个真正的数据库

这个类有几个方法可以让你设置一个键并对其进行赋值,然后使用数组将其转换为mysql UPDATE和INSERT sql查询.我试图弄清楚如何100%使用这个代码,所以我可以在我自己的应用程序中使用它的UPDATE和INSERTS的这个功能.

基本上从我收集到的东西你做这样的事……

// assign some key/values to insert into DB
$db->assign('name','dfgd');
$db->assign('age',87);
$db->assign('sex','female');
$db->assign('user_id',4556);

// Do  the insert
$db->insert('testing2');

现在我感到困惑的是,我可以继续在页面上反复运行这样的代码,它总是会使用正确的键/值数组集.上面你可以看到我使用了assign()方法4次然后调用insert()方法来创建它

INSERT INTO test (name,age,sex,user_id) VALUES (jason davis,26,male,5345)

现在如果我在同一页面上运行这样的另一套……

// assign some key/values to insert into DB
$db->assign('name',4556);

// Do  the insert
$db->insert('testing2');

然后创建这个……

INSERT INTO testing2 (name,user_id) VALUES (dfgd,87,female,4556)

那么它如何不组合2组4,所以它不是在第二个插入上插入8个记录,而是用新集合替换第一组4个值.这很棒,我想要但我不明白它是怎么回事?这还可以改进吗?

下面是一个完整的类和我的演示代码,它可以运行而无需连接到mysql进行此演示,它将打印以筛选它构建的SQL.

另外,下面的代码中的公共函数reset()需要在哪里使用,还是不需要?

<?php 
class DB{
    public $fields;

    public function assign($field,$value){
        $this->fields[$field] = ($value)==""?("'".$value."'"):$value;
    }

    public function assign_str($field,$value){
        $this->fields[$field] = "'".addslashes($value)."'";
    }

    public function reset(){
        $this->fields = array();
    }

    public function insert($table){
        $f = "";
        $v = "";
        reset($this->fields);
        foreach($this->fields as $field=>$value){
            $f.= ($f!=""?",":"").$field;
            $v.= ($v!=""?",":"").$value;
        }
        $sql = "INSERT INTO ".$table." (".$f.") VALUES (".$v.")";
        //print SQL to screen for testing
        echo $sql;
        //$this->query($sql);
        return $this->insert_id();
    }

    public function update($table,$where){
        $f = "";
        reset($this->fields);
        foreach($this->fields as $field=>$value){
            $f.= ($f!=""?",":"").$field." = ".$value;
        }
        $sql = "UPDATE ".$table." SET ".$f." ".$where;
        echo $sql;
        //$this->query($sql);
    }

    public function query($_query){
        $this->query = $_query;
        $this->result = @mysql_query($_query,$this->link_id) or die( $_query."<p>".mysql_error($this->link_id) );
        return $this->result;
    }

    public function insert_id(){
        return @mysql_insert_id($this->link_id);
    }
}


// start new DB object
$db = new DB;

// assign some key/values to insert into DB
$db->assign('name','jason davis');
$db->assign('age',26);
$db->assign('sex','male');
$db->assign('user_id',5345);

// Do  the insert
$db->insert('test');


echo '<hr />';

// assign some key/values to insert into DB
$db->assign('name',4556);

// Do  the insert
$db->insert('testing2');


echo '<hr />';

// assign some key/values to UPDATE the DB
$db->assign('name',5345);

// DO the DB UPDATE
$db->update('blogs','WHERE user_id = 23');

?>

解决方法

insert()和update()应该(最初)在执行时将$this-> fields属性设置回一个空数组,但是你以某种方式(错误地)删除了该代码?

将您的代码更新为:

public function insert($table){
        $f = "";
        $v = "";
        foreach($this->fields as $field=>$value){
            $f.= ($f!=""?",":"").$value;
        }
        $sql = "INSERT INTO ".$table." (".$f.") VALUES (".$v.")";
        $this->reset();
        //print SQL to screen for testing
        echo $sql;
        //$this->query($sql);
        return $this->insert_id();
    }

    public function update($table,$where){
        $f = "";
        foreach($this->fields as $field=>$value){
            $f.= ($f!=""?",":"").$field." = ".$value;
        }
        $sql = "UPDATE ".$table." SET ".$f." ".$where;
        $this->reset();
        echo $sql;
        //$this->query($sql);
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读