2015-07-11 25 views
1

我有一個帶有'reference'的表,其思想是如果已經存在引用,那麼它不會插入。如果它不存在,那麼它插入。但是這個代碼只是不插入任何一種方式。請協助。如果不存在,那麼INSERT else顯示消息不起作用

$dbconn = pg_connect("host=127.0.0.1 dbname=XX user=XX password=XX") or die('Could not connect: ' . pg_last_error()); 
$query = "IF NOT EXISTS (SELECT reference FROM card WHERE reference = '$reference') 
INSERT INTO staff (reference, first_name, last_name, address1, address2, address3, address4) 
VALUES ('$reference', '$first_name', '$last_name', '$address1', '$address2', '$address3', '$address4')"; 

$result = pg_query($query); 
    if (!$result) 
{ 
echo "Customer update failed!! This ID might already be registered with us. Please go back and check the spelling of your email address.<br><br><input type=\"button\" value=\"Go Back\" onClick=\"history.go(-1);return true;\">"; 
die; 
} else 
{ 
echo "Customer update successful; "; 
} 

pg_close(); 
+1

你在那裏有SQL注入漏洞 - 從來沒有使用原始變量來構建查詢文本。你應該使用PDO並做好準備。 – Tometzky

+0

是的,我知道,但目前並不擔心注射,會在現場系統上正確準備sql,只需先讓它工作即可。 – Kilisi

+2

永遠不會發生。 – Tometzky

回答

3

設爲column as Unique。然後插入並不擔心該行的存在。如果它已經存在,它將返回FALSE。

+0

效果很好,很容易的解決方案謝謝 – Kilisi

1
try{ 
    $db = new PDO("pgsql:dbname=yourdbname charset=utf8","username","password"); 
    $query=$db->prepare(" 
     insert into staff (
      reference, first_name, last_name, 
      address1, address2, address3, address4 
     ) 
     select * from (
      select ? as reference, ?, ?, ?, ?, ?, ? 
     ) as _ 
     where reference not in (select reference from staff) 
    "); 
    $insert = $query->execute(array(
     $reference, $first_name, $last_name, 
     $address1, $address2, $address3, $address4 
    )); 
    if ($insert->rowCount() == 0) { 
     echo "ERROR: Customer already exists!"; 
    } else { 
     echo "Customer account creation successful!"; 
    } 
} catch(PDOException $e) { 
    echo "Error: ".$e; 
} 
+0

這是超越我,我沒有使用過PDO,但我會查找它,並嘗試從你的例子中解決,謝謝 – Kilisi