用于将非重复值插入MySQL的PHP​​代码

时间:2016-11-20 18:33:42

标签: php mysql

我有基本的PHP / MySQL经验,参加了入门课程。我的知识实际上仅限于以下PHP代码:

if(!($stmt = $mysqli->prepare...)
if(!($stmt->bind_param...)
if(!$stmt->execute...)

我目前正在尝试编写一个允许用户输入新密码的程序,并根据数据库中的现有密码检查密码。

这就是我所拥有的:

<?php
foreach($Password){
    $dupesql = "SELECT PasswordID Passwords WHERE (Password = '$Password')";
    $duperaw = mysql_query($dupesql);
    if(mysql_num_rows($duperaw){
        echo nl2br("$Password has already been used \n");
    }
    else{
        echo "Password added \n";
    }
}
?>

我从这篇文章中获得了代码:Check for duplicates before inserting

我不确定代码本身是否有问题,或者我是否需要在我的PHP代码中添加任何其他内容才能使其正常工作,因为它目前正在生成错误500&#34;错误500&#34 ;

2 个答案:

答案 0 :(得分:1)

不推荐使用MySQL扩展程序,并且可能从删除它的位置获得了PHP 7.0。将代码重写为MySQLi或PDO。查看有关如何转换为MySQLi的此问题:How could I change this mysql to mysqli?

此外,您的代码不会添加密码(从不)。您可能希望在添加密码之前添加&#34;密码添加&#34;消息,但请注意:您要使用的解决方案并不理想,因为在检查存在密码和添加密码之间存在竞争条件的风险。这意味着可以两次添加密码。

要解决此问题,您可能希望使用事务。此问题涉及更多详细信息:PHP + MySQL transactions examples

答案 1 :(得分:0)

我决定采用完全不同的路线,即将密码列设置为唯一。

然后我做了一个简单的INSERT,如果用户试图添加副本,则会提示错误:

final ActivityOptionsCompat options = ActivityOptionsCompat.makeScaleUpAnimation(yourButton, 0, 0, 0, 0);
startActivity(activityStartingIntent, options.toBundle());