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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了这个PHP如何知道要使用哪个数组键/值?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
下面是其他人编写的 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()需要在哪里使用,还是不需要?

<?@L_126_27@ 
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);
    }

脚本宝典总结

以上是脚本宝典为你收集整理的这个PHP如何知道要使用哪个数组键/值?全部内容,希望文章能够帮你解决这个PHP如何知道要使用哪个数组键/值?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。