2016-10-08 9 views
0

그냥 코어 PHP 작업을 삽입하고 있습니다. 나는 이미 그 쿼리가 올바른 일을했는지 ​​작동합니다. 시간 복사 및 붙여 넣기 라이브 파일을 복사합니다. 쿼리는 작동하지 않습니다. 아래에.내 핵심 PHP 삽입 쿼리가 작동하지 않습니다

<?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; 
     } 
?> 
+0

당신이 점점 정확한 오류는 무엇인가? –

+0

경고 : mysql_num_rows()는 매개 변수 1이 리소스가 될 것으로 예상하고, 부울은 /home/abservedemotech/public_html/projects/android/wechatapp/wecant.php 18 줄에 있습니다. { "message": "Inserted successfully"} 하지만 값은 – murugesh

+0

PHP 버전을 삽입하지 않습니까? –

답변

0

코드에 대한 몇 가지 사항이 있습니다.

1) 입력 데이터를 위생 처리하지 않으므로 SQL 주입에 취약 해집니다.

이 오류에 대한

$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 

당신이 $ 결과는 부울) (TRUE 또는 FALSE 것을 의미 mysql_num_rows도 ($ 결과)에 대한 "부울"오류를 수신하는 경우 . mysql_query() 함수 (http://php.net/manual/en/function.mysql-query.php)의 문서를 참조하면, 성공한 경우에만 리소스를 반환한다는 것을 알게 될 것이다. ON ERROR, 그것은 부울을 반환합니다. 이것은 mysql_query()에서 SELECT 문에 문제가 있음을 의미합니다. 문제가 스크립트 (예 : mysql_select_db() 또는 mysql_connect())에서 실제로 훨씬 높을 수 있다고 말할 수 있도록 노력하겠습니다. 아마도 프로덕션 환경에서 PHP 5.5 이상을 사용하고 있을까요? 이것은 mysql_query()가 PHP 5.5에서 더 이상 사용되지 않으므로 중요합니다.

3) mysql_connect()에서 @ 기호를 사용하고 있습니다. 즉, 프로덕션 환경에서 mysql_connect()가 지원되는지 여부를 확인하는 데 도움이 될 수있는 오류를 모두 표시하지 않습니다. http://php.net/manual/en/language.operators.errorcontrol.php

0

이 명령을 실행 한 후 :

php Desktop\test_stack.php 

을 내가 가지고 및 행 삽입 :

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

확인 요청 변수, 테이블 필드 : 내가 가진 두 번째 시간에

{"message":"Inserted successfully"} 

유형.

덤프 mysql_error(); 오류가 발생했습니다.

Mysqli 또는 PDO 라이브러리도 사용하십시오.

당신이 코드를

0

사용을 감사합니다

경우 ($에서 그 결과> NUM_ROWS> 0) 대신이

{ }

경우 (mysql_num_rows도 ($ 결과) = = 1)

0

문제는 귀하의 코드에 없습니다, 형성되고있는 귀하의 SQL 쿼리에,

쿼리가 성공적으로

그렇지 않으면 $ 변수는 부울을 포함 결과를 실행하는 경우 $ 결과에 저장된3210

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

값은 자원 유형이 될 것입니다.

var_dump ($ result);를 사용할 수 있습니다. 결과 변수를 확인하십시오;

개발 목적으로 다음 행을 사용해야합니다.

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

항상 쿼리가 성공적으로 실행되고 있는지 확인해야합니다. 당신이 당신의 응용 프로그램이 오류에 의해 때마다 죽을 쿼리 당신이 할 수 있습니다 checkquery 기능이

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

처럼 실패 할 경우 사용자 정의 기능을 사용하지 않으려면

당신은 또한이 방법을 사용할 수 있습니다 have

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를 사용하여 시작해야하는 다른 더 좋은 방법이 있습니다.

0

It's better to use MySqli functions instead of MySql functions.this code inserts the record in live properly.

<?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> 
관련 문제