根据POST参数创建更新查询

时间:2014-05-11 10:23:25

标签: php mysql sql

我有一个显示此人个人信息的表单

   <form>
     <input type="text" name="per_name" id="name_1"/>
     <input type="text" name="per_mail" id="email_1"/>
     <input type="text" name="per_phone" id="phone_1"/>
   </form>

现在,当我提交此表单时,将调用数据库的更新查询,如:

      if($_POST['name']!=['name from db']){
           $sql = "update table_1 set name=? where int_id=?";
      }

通过这种方式,我必须编写三个不同的更新查询。但我希望更新查询应该基于验证提供的值是否与DB中已存在的值不同而生成。

请在这里指导。

2 个答案:

答案 0 :(得分:3)

您可以解决此问题的一种方法是在数据库中进行一些更改。

实际上,名称可以重复,但您不能拥有2个不同的人(名称)使用的相同电子邮件地址,所以放一个电子邮件地址列的唯一索引约束。

然后,使用 Replace INTO

,而不是更新
$sql = "REPLACE INTO table_1 (name,email,phone) VALUES ({$_POST['per_name']},{$_POST['per_mail']},{$_POST['per_phone']})"; 

来自文档:

  

REPLACE的工作原理与INSERT完全相同,只是如果在一个旧行中   table与PRIMARY KEY或UNIQUE的新行具有相同的值   index,在插入新行之前删除旧行。

在上述情况下,如果用户尝试输入相同的电子邮件ID,则会更新,如果是新的电子邮件ID,则插入< / em>的

答案 1 :(得分:2)

这可以使用一个更新查询在一个查询中完成:

$sql = "update table_1 set name=?, mail=?, phone=? where int_id=?";

不需要3个不同的查询

并且对于验证,您可以使用

$name = $_POST['per_name'];
$mail = $_POST['per_mail'];
$phone = $_POST['per_phone'];
$qry = array();

if($name !== ['value from db'])
   $qry[] = 'name=?';

if($mail !== ['value from db'])
   $qry[] = 'mail=?';

if($phone !== ['value from db'])
   $qry[] = 'phone=?';

if(count($qry) > 0) {
   $qry = implode(', ', $qry);
   $updateQuery = "update table_1 set " . $qry . " where int_id=?";
   // Execute your query here
}