这个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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |