PHP MySQL INSERT查询& PHP似乎运行了两次

时间:2015-03-10 13:52:43

标签: php mysql

我想为Android制作简单的登录服务器。

登录功能运行良好,但在注册时有一些问题。

我的意图是:

  1. Android客户端使用HTTPPOST将用户信息(ID,用户名,密码)发送到XAMPP服务器。

  2. 服务器获取用户信息,并从数据库中查找重复ID或用户名(使用选择查询)。如果存在重复,则使用echo响应客户端。

  3. 如果不存在重复,则使用插入查询将新用户信息发送到数据库。并使用echo响应客户端。

  4. 如果存在重复,则效果很好。服务器响应正确。

    但是如果没有重复,查询的输出为1然后服务器响应'有重复'......

    login.php与register.php是相同的代码,但在login.php中没有插入查询,并且它运行良好。

    所以我认为这个问题是由插入查询引起的。

    这是我的代码:

    <?php
    $hostname_localhost ="localhost";
    $database_localhost ="mydatabase";
    $username_localhost ="root";
    $password_localhost ="";
    $id_localhost ="";
    
    $localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost, $id_localhost) or trigger_error(mysql_error(),E_USER_ERROR);
    mysql_select_db($database_localhost, $localhost);
    
    $username = $_POST['username'];
    $password = $_POST['password'];
    $id = $_POST['id'];
    
    $query_search = "select * from tbl_user where username = '".$username."' OR id = '".$id."'";
    $query_exec = mysql_query($query_search) or die(mysql_error());
    $rows = mysql_num_rows($query_exec);
    
    if($rows == 0) { 
        $query_register = "INSERT INTO tbl_user (id, username, password) VALUES ('$id', '$username', '$password')";
        $result = mysql_query($query_register) or die(mysql_error());
        if($result == TRUE){
            echo "Register Success";
        } else {
            echo "Register Fail";
        }
        exit;
        die;
    } else {
        echo "Registered Device or Username";
        exit;
    }
    ?>
    

    login.php几乎一样。只搜索查询(选择id和用户名和密码相同)和插入查询不同(在login.php中没有插入)。

    服务器响应错误,但插入操作正在进行。我可以在我的数据库中看到新记录。所以...似乎要运行两次。

    客户端没有问题,因为它也与登录代码几乎相同(并且登录适用于没有插入查询:))。

1 个答案:

答案 0 :(得分:0)

<强>更新

mysql_num_rows返回一个int,你正在检查$ rows是否为false而不是0.使用===


您在id中指的是tbl_user,为什么用户会提供他们的ID?您确定要检查正确的id吗?您觉得应该对设备ID进行单独查询或检查表device_id中的tbl_user列。

需要考虑的其他事项

exit;die;是相同的,所以两次调用是没有意义的。

if ($rows == 0)正在检查(bool) false而不是整数0。使用===检查提供的类型。

使用&#34;&#34;双引号可以直接提供变量; 例如。 "...WHERE username = '$username'"代替"... WHERE username = '".$username."'"

使用mysqli而不是mysql来了解更多功能和提高安全性; http://php.net/manual/en/book.mysqli.php