无法将记录插入MySQL,但没有显示错误

时间:2016-11-01 14:38:50

标签: java php mysql sqlite mysqli

任务:将android sqlite中的记录同步到mysql。

问题:mysql / php没有在mysql中将数据插入到我的表中。但没有显示任何错误。

DB_Connect.php:

<?php

class DB_Connect {

    // constructor
    function __construct(){

    }

    // destructor
    function __destruct(){

    }

    // connecting to database
    public function connect(){
        require_once 'config.php';  // defined DB_HOST,DB_USER,DB_PASSWORD here
        // connecting to mysql
        $con = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD);
        // selecting database
        mysqli_select_db($con,"heart");
        // return database handler
        return $con;
    }

    // closing database connection
    public function close(){
        mysqli_close($this->connect());
    }
}

?>

DB_Operations.php:

<?php
class DB_Operations {

    private $db;
    public $last_id;
    public $error;
    public $error_conn;
    public $error_no;

    // constructor
    function __construct(){
        require 'DB_Connect.php';
        $this->db = new DB_Connect();
        $this->db->connect();
    }

    // destructor
    function __destruct(){

    }

    // Storing new doctor
    public function storeDoctor($_id,$firstName,$lastName,$specialization,$licenseNumber,$clinicAddress,$email,$contactNum,$username,$password,$aboutMe){
        $result = mysqli_query($this->db->connect(),"INSERT INTO doctor(_id,first_name,last_name,specialization,license_number,clinic_address,email,contact_number,username,password,about_me) VALUES('$_id','$firstName','$lastName','$specialization','$licenseNumber','$clinicAddress','$email','$contactNum','$username','$password','$aboutMe')");

        if (mysqli_connect_errno()){
            $this->error_conn = mysqli_connect_error();
        }

        if(!$result){
            if(mysqli_errno($this->db->connect()) == 1062){
                // duplicate key - primary key violation
                return true;
            } else{
                // for other reasons
                $this->error = mysqli_error($this->db->connect());
                $this->error_no = mysqli_errno($this->db->connect());
                return false;
            }
        } else{
            $this->last_id = mysqli_insert_id($this->db->connect());
            return true;
        }
    }

    // getters
    public function getError(){
        return $this->error;
    }
    public function getError_no(){
        return $this->error_no;
    }
    public function getError_conn(){
        return $this->error_conn;
    }
    ...

insertuser.php:

<?php
include 'DB_Operations.php';
// create object for DB_Operations class
$db = new DB_Operations();
// get JSON posted by Android Application
$json = $_POST["doctorsJSON"];
// remove slashes
if(get_magic_quotes_gpc()){
    $json = stripslashes($json);
}
// decode JSON into Array
$data = json_decode($json);
// util arrays to create response JSON
$a = array();
$b = array();
// loop through an array and insert data read from JSON into MySQL DB
for($i=0; $i<count($data); $i++){
    // store doctor into MySQL DB
    $res = $db->storeDoctor($data[$i]->_id,$data[$i]->first_name,$data[$i]->last_name,$data[$i]->specialization,$data[$i]->license_number,$data[$i]->clinic_address,$data[$i]->email,$data[$i]->contact_number,$data[$i]->username,$data[$i]->password,$data[$i]->about_me);

    // based on insertion, create JSON response
    $b["local_id"] = $data[$i]->_id;
    if($res){
        $b["server_id"] = $db->last_id;
        $b["status"] = 'yes';
    }else{
        $b["status"] = 'no';
        $b["err_no"] = $db->getError_no();
        $b["error"] = $db->getError();
        $b["error_conn"] = $db->getError_conn();
    }
    array_push($a,$b);
}

// post JSON response back to Android Application
echo json_encode($a);
?>

我在java中有一个函数,它将sqlite数据同步到mysql:

public void syncSQLiteToMySQL(Context context,String selectQuery){
    dop = new DatabaseOperations(context);
    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams params = new RequestParams();
    ArrayList<HashMap<String,String>> doctorList = new ArrayList<HashMap<String,String>>();
    doctorList = dop.getAllDoctors();
    if(doctorList.size()!=0){
        String json = dop.composeJSONfromSQLite(selectQuery);
        params.put("doctorsJSON", json);
        Log.i("json to pass", json);
        client.post("http://"+ip+":8080/changed_server_name/insertuser.php",params ,new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(String response) {
                Log.e("client response",response);
                try {
                    JSONArray arr = new JSONArray(response);
                    for(int i=0; i<arr.length();i++){
                        JSONObject obj = (JSONObject)arr.get(i);
                        // did something with json response here
                        dop.updateSyncStatus(obj.getString("local_id"),obj.getString("status"));
                    }
                    message = "DB Sync completed!";
                } catch (JSONException e) {
                    message = "Error Occured [Server's JSON response might be invalid]!";
                    Log.e("JSONException",e.getMessage());
                }
            }

            @Override
            public void onFailure(int statusCode, Throwable error, String content) {
                if(statusCode == 404){
                    message = "Requested resource not found";
                }else if(statusCode == 500){
                    message = "Something went wrong at server end";
                }else{
                    message = "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet]";
                    Log.e("sync post failure",error.toString());
                }
            }
        });
    }
}

所以,这是回复:

  

[{&#34; local_id&#34;:&#34; 0&#34;&#34;状态&#34;:&#34;无&#34;&#34; err_no&#34 ;: 0,&#34;错误&#34;:&#34;&#34;&#34; error_conn&#34;:空}]

JSON工作正常。没问题。我检查过并传递了正确的数据。只是PHP和MySQL方面。不知何故,我无法找到此代码的错误。没有错误消息,错误号为0,并且连接到DB时没有错误。但storeDoctor()中的查询返回false。怎么会这样?我一直在这个网站上和其他人一起阅读这个问题,但我并没有真正找到与我的问题相近的东西。

请赐教。真的很感激你的帮助。提前谢谢。

编辑:我也尝试了mysqli_ping($this->db->connect());并返回true表示连接正常。那么,究竟是什么让查询失败?

1 个答案:

答案 0 :(得分:-1)

您是否尝试使用error_reporting(E_ALL);

同样位于您使用的构造函数中 $这 - &GT; DB-&GT;连接();

然后在您使用的商店 $ result = mysqli_query($ this-&gt; db-&gt; connect(),

您可以发布连接代码