我的核心php插入查询不起作用

时间:2016-10-08 05:57:33

标签: php

我正在做核心php插入action.i我已经在本地工作查询工作正确。时间复制并粘贴查询不起作用的实时文件。我的查询在那里。

 <?php
    $db_host="localhost";
    $db_user="username_goes_here";
    $db_pass="password_goes_here";
    $connection = @mysql_connect($db_host,$db_user,$db_pass) or die("Error connecting to database");
    $db = mysql_select_db("abserve_wechat", $connection); 

    $username = $_REQUEST['username'];
    $phonenumber = $_REQUEST['phonenumber'];
    $password = $_REQUEST['password'];
    $email = $_REQUEST['email'];
    $pass=md5($password);

    unset($_REQUEST['adminer_version']);
        //print_r($_REQUEST);exit;

        $result = mysql_query("SELECT * FROM `abserve_users`  WHERE `phonenumber`='$phonenumber'");
        if(mysql_num_rows($result) == 1)
        {
            $response['message']    = "phonenumber already taken";
            echo json_encode($response);exit;
        }else{
            $insert = mysql_query("INSERT INTO `abserve_users` (username,phonenumber,password,email) VALUES ('$username', '$phonenumber','$pass','$email')");

        $response['message']    = "Inserted  successfully";

        echo json_encode($response);exit;
        }
?>

5 个答案:

答案 0 :(得分:0)

关于您的代码的一些事情。

1)您没有对输入数据进行清理,因此您很容易受到SQL注入的攻击。<​​/ p>

e.g。

$username = $_REQUEST['username'];
$phonenumber = $_REQUEST['phonenumber'];
$password = $_REQUEST['password'];
$email = $_REQUEST['email'];

2)对于这个错误:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/abservedemotech/public_html/projects/android/wechatapp‌​/wecant.php on line 18 

如果你收到mysql_num_rows($ result)的“boolean”错误,这意味着$ result是一个布尔值(TRUE或FALSE)。如果你参考mysql_query()函数(http://php.net/manual/en/function.mysql-query.php)上的文档,你会发现它只返回一个资源ON SUCCESS。 ON ERROR,它返回一个布尔值。这意味着mysql_query()中的SELECT语句出了问题。我冒昧地说,你的脚本中的问题实际上可能要高得多(例如mysql_select_db()甚至mysql_connect())。也许您的生产环境使用PHP 5.5或更高版本?这很重要,因为在PHP 5.5中不推荐使用mysql_query()。

3)你在mysql_connect()上使用@符号,这意味着你可以抑制任何可能帮助你发现生产环境是否支持mysql_connect()的错误。 http://php.net/manual/en/language.operators.errorcontrol.php

答案 1 :(得分:0)

运行此命令后:

php Desktop\test_stack.php

我插入了行:

{"message":"Inserted  successfully"}

第二次我得到了:

php Desktop\test_stack.php
{"message":"phonenumber already taken"}

检查请求变量,表字段类型。

转储mysql_error();得到错误。

还使用Mysqli或PDO库。

谢谢

答案 2 :(得分:0)

使用此代码:

if($ result-&gt; num_rows&gt; 0){ }

而不是

if(mysql_num_rows($ result)== 1)

答案 3 :(得分:0)

问题不在你的代码中,而是在你正在形成的sql查询中,

$result = mysql_query("SELECT * FROM `abserve_users`  WHERE `phonenumber`='$phonenumber'");

如果查询成功运行,$ result中存储的值将为资源类型

否则你的$ result变量包含boolean。

你可以使用var_dump($ result);检查结果变量;

您应该使用以下行代替开发目的。

$result = mysql_query("SELECT * FROM `abserve_users`  WHERE `phonenumber`='$phonenumber'") or die("query failed to execute");

您应该始终检查您的查询是否成功执行。

如果您不希望每次出现任何错误导致您的应用程序死亡,您也可以这样使用它,如果查询失败,请使用自定义函数

 $query = "SELECT * FROM `abserve_users`  WHERE `phonenumber`='$phonenumber'";
 $result = mysql_query($query) or checkerror($query);
在checkquery函数中你可以

    function checkerror($query){


    echo "<div style='position:fixed;z-index:400;top:20%;border:5px solid red;width:600px;left:0;right:0;margin:auto;padding:20px;background:white;'>
    <h1>Sorry to disturb you !! But an error is found</h1>
     <p>The error is regarding the following query :</p>
     <p>".$query."</p>
    </div>";
    //die();

}

还有其他更好的方法可以开始使用Mysqli或Pdo。

答案 4 :(得分:0)

  

最好使用MySqli函数而不是MySql函数。这段代码可以正常插入记录。

<?php  
 $db_host="localhost";
 $db_user="root";
 $db_pass="";
 $db="test";
 $connection = @mysqli_connect($db_host,$db_user,$db_pass,$db) or die("Error connecting to database");  
  if(isset($_POST["submit"]))
 {
    $sql1="select * from abserve_users where phonenumber='".$_POST["phonenumber"]."' ";
    $result=mysqli_query($connection,$sql1); 
    if(mysqli_num_rows($result)==1)
    {
        $response['message']="phonenumber already taken";
        echo json_encode($response);exit;
    }
    else
    {
        $username=$_POST["username"];
        $phonenumber=$_POST["phonenumber"];
        $password=$_POST["password"];
        $email=$_POST["email"];
        $sql2="insert into abserve_users (username,phonenumber,password,email) values ('$username','$phonenumber','".md5($password)."','$email')";
        $insert = mysqli_query($connection,$sql2);
        $response['message']="Inserted  successfully";
        echo json_encode($response);
        exit;
    }
}
?>
<!DOCTYPE html>
 <head>
   <title>insert_select</title>
 </head>
 <body>
<form action="#" method="post">
    username:<input type="text" name="username"><br><br>
    phonenumber:<input type="text" name="phonenumber"><br><br>
    password:<input type="password" name="password"><br><br>
    email:<input type="email" name="email"><br><br>
    <input type="submit" name="submit" value="submit">
</form>
</body>
</html>