Php 如果MySQL上已经存在值,则不要复制该值
我一直在努力做到这一点,但其他问题我就是想不出来。我一直在阅读posibles解决方案,但没有一个与我的代码一起使用,或者如果它们与我的代码一起使用,我就不知道如何或在哪里使用它们 我有一个数据库,用户在其中发送记录。数据库由几个表组成,其中包含以下“名称、姓氏、电话”。如果这些值中的任何一个重复,我希望我的代码识别并忽略表单的提交,如果DB上已经存在所有这些值 这是我的密码:Php 如果MySQL上已经存在值,则不要复制该值,php,sql,duplicates,ignore,Php,Sql,Duplicates,Ignore,我一直在努力做到这一点,但其他问题我就是想不出来。我一直在阅读posibles解决方案,但没有一个与我的代码一起使用,或者如果它们与我的代码一起使用,我就不知道如何或在哪里使用它们 我有一个数据库,用户在其中发送记录。数据库由几个表组成,其中包含以下“名称、姓氏、电话”。如果这些值中的任何一个重复,我希望我的代码识别并忽略表单的提交,如果DB上已经存在所有这些值 这是我的密码: <?php $con = mysql_connect("HOST","USER
<?php
$con = mysql_connect("HOST","USER","PASS");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("testdb", $con);
$sql="INSERT INTO people (Name, LastName, Phone)
VALUES
('$_POST[Name]','$_POST[LastName]','$_POST[Phone]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Record Added";
mysql_close($con);
?>
mysql的mysql.*
函数现在都不推荐使用,永远不应该使用。更改代码以执行以下操作:
//Set up a PDO connection to MySQL
$host = 'host_name';
$dbname = 'database_name';
$user = 'user_name';
$pass = 'user_pass';
try
{
$DB = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
//Determine whether the appropriate values have been passed.
if(isset($_POST['Name']))
{
$name = $_POST['Name'];
}
else
{
echo "You must provide a name!";
exit; //This may not be what you want to do here, it's an example action
}
if(isset($_POST['LastName']))
{
$name = $_POST['LastName'];
}
else
{
echo "You must provide a last name!";
exit; //This may not be what you want to do here, it's an example action
}
if(isset($_POST['Phone']))
{
$name = $_POST['Phone'];
}
else
{
echo "You must provide a phone number!";
exit; //This may not be what you want to do here, it's an example action
}
//Set up the query using anonymous values
$sql="INSERT INTO people (Name, LastName, Phone) VALUES ('?','?','?')";
$sth = $DB->prepare($sql);
try
{
//Attempt to execute the insert statement
$sth->execute(array($_POST[Name], $_POST[LastName], $_POST[Phone]));
echo "Record Added";
}
catch(PDOException $e)
{
//If the insert failed, then you can handle the error, and determine
//what further steps need to be taken.
echo "Record Not Added";
}
下面是另一个类似设置的问题,可能对您也很有用:
插入前在表中搜索
<?php
$con = mysql_connect("HOST","USER","PASS");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("testdb", $con);
$name = mysql_real_escape_string($_POST[Name]);
$LastName= mysql_real_escape_string($_POST[LastName]);
$Phone= mysql_real_escape_string($_POST[Phone]);
$search_res=mysql_query("SELECT * from people where Name='$Name' OR LastName='$LastName' OR Phone='$Phone'");
if(mysql_num_rows($search_res) < 1){
$sql="INSERT INTO people (Name, LastName, Phone)
VALUES
('$Name','$LastName','$Phone')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Record Added";
}else{
echo "User Already exits";
}
mysql_close($con);
?>
试试这个简单的解决方案
$result = mysql_query("SELECT * FROM TABLE WHERE Column = 'value' ");
if( mysql_num_rows($result) < 1) {
mysql_query("INSERT INTO table (column) VALUES ('value') ");
}
$result=mysql\u查询(“从表中选择*列='value'”);
if(mysql_num_rows($result)<1){
mysql_查询(“插入表(列)值('value')”;
}
您想在表上设置一个唯一的
键。此外,您的代码对SQL注入是完全开放的,如果您还没有进行过SQL注入,您将受到黑客攻击。学习将准备好的查询与PDO或类似的工具一起使用。@只有一个唯一的键不会起作用。您必须插入“忽略”,否则在尝试添加重复项时会出现错误。@SamHuckaby,对。。。难道你不想抓住它,用某种方式来处理它吗<代码>忽略
可能是在这种情况下您最不想做的事情。也许你想提示用户数据已经存在或其他什么。@Brad,我现在只是在试验这种类型的编码。在深入研究其他东西之前,我试着想一些事情。我真的很感谢你的评论,现在让我谈谈这个问题,我会把它列在待办事项清单上。但现在我只需要一个选择或想法来实现这个想法。谢谢@Edwinrif,停止学习mysql.*
,至少切换到mysqli
。至少,您必须转义数据。即使出于某种原因,你没有考虑安全性,但是如果有人在输入框中输入引号,你的查询就会失败。这不能回答OP的问题。但是,如果没有在表上设置适当的UNIQUE
约束,它也不起作用。@Brad我在最后有关于设置唯一键的信息,为了简洁起见,我使用了他的查询。@SamHuckaby您应该在答案中添加关于设置该键的信息。此外,发布不安全的代码也是危险的。很多不太懂的人会简单地复制粘贴它。答案中的代码应该是高质量的。@Brad,我理解你的观点,我正在更新我的答案。我将演示如何设置PDO连接,并测试该值是否已添加,并给出错误信息。:)感谢您的建设性批评。请不要忘记使用mysql_real_escape_string()解析表单字段值,如果使用新版本的PHP-1,请使用mysqli,此代码会受到SQL注入攻击,不应使用。请参阅上面的注释,我只是解释如何从数据库中搜索,而不是插入重复的记录。把它放在你的代码中,我会删除否决票。如果有人在<代码> >选择< /COD>和<代码> INSERT /COD>之间做一个<代码>插入< /代码>,这将发生什么。这是不够的。可以在两个查询之间插入值。您可以修改它以消除重复条目