2016-04-16 58 views
0

我想通过pdo插入数据库,但是如果没有设置某些变量,我不会将它们写入数据库。(PHP)PDO使用取决于设置变量的不同查询

实施例:

$名称被设置

$姓未设置

$query = $db->prepare("INSERT INTO customer SET name = ?"); 
$query->execute(array($name)); 

实施例2:

$名称被设置

$姓被设定

$query = $db->prepare("INSERT INTO customer SET name = ?, surname = ?"); 
$query->execute(array($name, $surname)); 

我该如何实施它只有一个准备和执行?或者什么是最明智的实施方式?

+0

建立一个查询作为一个变量。 –

+0

使用if条件并根据if条件评估使用其中一个查询。 –

+1

请阅读'INSERT'语法手册http://dev.mysql.com/doc/refman/5.7/en/insert.html然后重新开始 – RiggsFolly

回答

0

您可以使用,如果条件检查变量套装

if(isset($name)) 
{ 
if(isset($surname)) 
{ 
    $query = $db->prepare("INSERT INTO customer SET name = ?, surname = ?"); 
    $query->execute(array($name, $surname)); 

} 
else { 

    $query = $db->prepare("INSERT INTO customer SET name = ?"); 
$query->execute(array($name)); 
} 
} 

编辑: 你可以试试这个代码,如果你只想要一个准备的语句

if(isset($name)) 
{ 
    $q="INSERT INTO customer SET name = ?"; 
    $arr=array($name); 
    if(isset($surname)) 
{ 
    $q="INSERT INTO customer SET name = ?, surname = ?"; 
    $arr[]=$surname; 

} 

} 

$query = $db->prepare($q); 
$query->execute($arr); 
+0

I只想写准备并执行一次。我可以这样做$ query = $ db-> prepare($ sql); $查询 - >执行(阵列($ set_variables));并在if isset条件中设置$ sql和$ set_variables? – thotho

+0

编辑看起来几乎像我想要的解决方案。我会试试看,谢谢! – thotho

0

如果我理解你的问题,你想插入姓氏的值,即使它没有设置。

$db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$dbh->quote($name).','.$dbh->quote($surname).')'); 

即使代码为空,代码也会插入该值。

编辑:

,如果你想要得到的响应,使用此:

if($db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$dbh->quote($name).','.$dbh->quote($surname).')')) { 
    echo 'Success'; 
} else { 
    echo 'fail'; 
} 

编辑2:

/* if name is not set, insert ONLY surname */ 
    if(!isset($name)) { 
     if($db->exec('INSERT INTO `customer`(`surname`) VALUES('.$db->quote('surname').')')){ 
      echo 'success'; 
     } else { 
      echo 'fail'; 
     } 
    /* if surname is not set, insert ONLY name */ 
    } elseif(!isset($surname)) { 
     if($db->exec('INSERT INTO `customer`(`name`) VALUES('.$db->quote('name').')')){ 
      echo 'success'; 
     } else { 
      echo 'fail'; 
     } 
    /* if both are set, insert both */ 
    } else { 
     if($db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$db->quote('name').','.$db->quote('surname').')')){ 
      echo 'success'; 
     } else { 
      echo 'fail'; 
     } 
    } 
+0

我只想插入设置值,所以如果名字被设置,但姓氏不是,只设置名称如果名字和姓氏如果姓氏没有设置,但姓氏是,只有姓氏 – thotho

+0

@thotho - 好的,我已经更新了我的答案,结帐>编辑2 –

+0

@thotho让我们知道你的问题是否已解决 –

0

您可以尝试

<?php 
if (isset($name)&&isset($surname)) { 
    $query = $db->prepare("INSERT INTO customer SET name = ? , surname = ?"); 
    $query->execute(array($name, $surname)); 
}else { 
    if (isset($name){ 
     $query = $db->prepare("INSERT INTO customer SET name = ? "); 
     $query->execute(array($name)); 
    }else{ 
     $query = $db->prepare("INSERT INTO customer SET surname = ? "); 
     $query->execute(array($surname)); 
    } 
} 


?>