我只是想找一个简单的方法来告诉我记录是否已经存在,如果存在,则不要将其插入表中。无论是否存在,下面的代码都会插入......我只是想不出原因。
<?php
$FirstName = $_POST["FirstName"];
$LastName = $_POST["LastName"];
$conn = sqlsrv_connect( $hostname, $connectionInfo)
$dup = sqlsrv_query($conn, "SELECT * FROM contact WHERE (FirstName='$FirstName') AND (LastName='$LastName')");
if(sqlsrv_num_rows($dup) > 0)
{
echo "Already Exists";
}
else
{
$query = "INSERT INTO contact (FirstName, LastName) VALUES ('$FirstName', '$LastName')";
sqlsrv_query( $conn, $query );
}
编辑:
最终,将sqlsrv_num_rows($dup) > 0
更改为sqlsrv_has_rows($dup)
可解决问题。以下是我更新的代码:
$params = array($_POST['FirstName'], $_POST['LastName']);
$conn = sqlsrv_connect( $hostname, $connectionInfo)
$sql = "SELECT * FROM contact WHERE FirstName = ? AND LastName = ?";
$dup = sqlsrv_query($conn, $sql, $params);
if(sqlsrv_has_rows($dup))
{
echo "Already Exists";
}
else
{
$query = "INSERT INTO contact (FirstName, LastName) VALUES (?, ?)";
sqlsrv_query( $conn, $query, $params );
}
答案 0 :(得分:2)
首先,您需要确定主键。这通常是某种ID字段。我可能建议不要使用FirstName LastName的配对,因为有很多很多人具有相同的名字和姓氏。 “Kevin Kline”是演员和SQL Server MVP的名称(可能有很多甚至更多)。
如果你想盲目地将FirstName LastName插入表中,那么与RDBMS无关的查询将更像是
INSERT INTO contact (FirstName, LastName) VALUES ($FirstName, $LastName) WHERE NOT EXISTS
(SELECT 1 FROM contact where FirstName = $FirstName and LastName = $LastName);
(免责声明:我知道我没有根据您在帖子中的内容对其进行格式化,这是由于以下原因)
<强>但是:强>
您的代码也容易受到SQL注入攻击。请阅读PHP方法sqlsrv_query
,特别注意“params”参数。
此外,回到“Kevin Kline”的例子,这只会插入第一个“Kevin Kline”。我想如果您将“Kevin Kline”添加为星型模式中的维度,这将与事实表中的职业等其他维度相关联,我认为这很好。但是,如果那不是您的应用程序域,那么我强烈建议您确定将要用作表键的内容,以便准确跟踪相应的数据。