Php 如果不存在,则插入else显示消息不工作

Php 如果不存在,则插入else显示消息不工作,php,postgresql,Php,Postgresql,我有一个包含“reference”的表,其思想是如果已经存在一个引用,那么它就不会插入。如果它不存在,那么它会插入。但这段代码并没有以任何方式插入。请帮忙 $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 WH

我有一个包含“reference”的表,其思想是如果已经存在一个引用,那么它就不会插入。如果它不存在,那么它会插入。但这段代码并没有以任何方式插入。请帮忙

$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(); 

做一个决定。然后插入,不必担心该行的存在。如果它已经存在,则返回FALSE。

创建一个。然后插入,不必担心该行的存在。如果它已经存在,则返回FALSE。

其中存在SQL注入漏洞-切勿使用原始变量生成查询文本。你应该使用PDO和prepare。是的,我知道,但目前不担心注入,将在实时系统上正确准备sql,只需要首先让它工作。这永远不会发生。总是发生在这里,在它被安全保护之前,任何东西都不会生效。首先,使用pg_query_参数来避免SQL注入和动态不安全SQL。安全性不是一个附加组件,它应该是标准的行为。您有SQL注入漏洞-永远不要使用原始变量来构建查询文本。你应该使用PDO和prepare。是的,我知道,但目前不担心注入,将在实时系统上正确准备sql,只需要首先让它工作。这永远不会发生。总是发生在这里,在它被安全保护之前,任何东西都不会生效。首先,使用pg_query_参数来避免SQL注入和动态不安全SQL。安全性不是一个附加组件,它应该是标准行为。这超出了我的理解范围,我没有使用PDO,但我会查找它并尝试从您的示例中解决它,谢谢这超出了我的理解范围,我没有使用PDO,但我会查找它并尝试从您的示例中解决它,谢谢
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;
}