2016-04-16 112 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)); 
    } 
} 


?>