【问题标题】:How to get last auto increment value as foreign key to another table in php如何在php中获取最后一个自动增量值作为另一个表的外键
【发布时间】:2016-09-21 14:36:23
【问题描述】:

如何在面向对象的 php 中从一个表获取数据到另一个表的外键,我有两个表,一个名为 users 有两个字段:id 和 phonenumber。另一个表是 profile,它有 id、user_id profile_image、username、businessname 和 town,其中 user_id 是 users 表中 id 的外键。我希望我在用户表中插入电话号码我在配置文件表中获得 user_id 的外键。请我需要你的帮助我是 oophp 的初学者。感谢任何帮助将不胜感激

处理所有功能的Dbhandler.php

<?php
class DbHandler {
    private $conn;

    function __construct() {
        require_once dirname(__FILE__) . '/DbConnect.php';
        // opening db connection
        $db = new DbConnect();
        $this->conn = $db->connect();
    }

    public function createUser($phone) {
        $response = array();

        // insert query
        $stmt = $this->conn->prepare("INSERT INTO users(phone) values(?)");
        $stmt->bind_param("s",$phone );

        $result = $stmt->execute();

        $new_profile_id = $stmt->insert_id;

        $stmt->close();

        // Check for successful insertion
        if ($result) {
            $profile_result = $this->createProfile_userId($new_profile_id);

            // User successfully inserted
            return USER_CREATED_SUCCESSFULLY;
        } else {
            // Failed to create user
            return USER_CREATE_FAILED;
        }
    }
    return $response;
}


public function createProfile_userId($user_id) {
    //getUser's FNK
    $stmt = $this->conn->prepare("DELETE FROM profile where user_id = ?");
    $stmt->bind_param("i", $user_id);
    $stmt->execute();
    $result = $stmt->execute();

    $stmt->close();
    return $result;
}

public function createProfile($profile_image, $username, $businessname,$town) {

    $response = array();

    $stmt =$this->conn->query("SELECT  profile_id FROM profile ORDER BY profile_id ASC") ;

    $profile_id = 0;

    while($row = $stmt->fetch_array()){
        $profile_id = $row['profile_id'];
    }

    $path = "uploads/$profile_id.png";
    $actualpath = "https://localhost/GoodPriceApi/uploadImage/$path";

    // insert query 
    $stmt = $this->conn->prepare("INSERT INTO profile(profile_image, username, businessname, town) values(?, ?, ?, ?)");
    $stmt->bind_param("isss",$profile_image, $username, $businessname, $town);

    $result = $stmt->execute();

    $stmt->close();

    // Check for successful insertion
    if ($result) {
        file_put_contents($path,base64_decode($image));

        // User successfully inserted
        return USER_CREATED_SUCCESSFULLY;
    } else {
        // Failed to create user
        return USER_CREATE_FAILED;
    }

    return $response;
}
?>

以下文件用于调用函数。

create.php

<?php 
include './DbHandler.php';
$db = new DbHandler();

$response = array();

if ((isset($_POST['profile_image']) && isset($_POST['username']) &&       isset($_POST['businessname']) && isset($_POST['town']))!= '') {
    $profile_image = $_POST['profile_image'];
    $username = $_POST['username'];
    $businessname = $_POST['businessname'];
    $town = $_POST['town'];

    $res = $db->createProfile($profile_image, $username, $businessname,$town);

    if ($res == USER_CREATED_SUCCESSFULLY) {      
        $response["error"] = false;
        $response["message"] = "Profile created successfully";
    } else if ($res == USER_CREATE_FAILED) {
        $response["error"] = true;
        $response["message"] = "Sorry! Error occurred during profile creation.";
    } 
} 
?>

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

    这个问题是一个android 后端php API,所以要在profile table中轻松获取user_id,我们不需要这个函数:

      public function createProfile_userId($user_id) {
    //getUser's FNK
    $stmt = $this->conn->prepare("DELETE FROM profile where user_id = ?");
    $stmt->bind_param("i", $user_id);
    $stmt->execute();
    $result = $stmt->execute();
    
    $stmt->close();
    return $result;
    

    }

    但是我可以做的是回显或将 json 的 id 和 phonenumber 传递给 android 的接口,在插入到用户之后以及在你得到的参数中,你可以选择 id 作为 user_id,最后你将它设置为textview 或 texfield,最后将其用作要插入到配置文件表中的输入。

    下面的文件是DbHandler.php,它包含了两个表中的所有插入函数:

    <?php
     class DbHandler {
    private $conn;
      function __construct() {
        require_once dirname(__FILE__) . '/DbConnect.php';
        // opening db connection
        $db = new DbConnect();
        $this->conn = $db->connect();
       }
      public function createUser($phone) {
        // insert query
        $stmt = $this->conn->prepare("INSERT INTO users(phone) values(?)");
        $stmt->bind_param("s",$phone );
        $result = $stmt->execute();
        $stmt->close();
    
        // Check for successful insertion
        if ($result) {
    
            // User successfully inserted
       return $result;
        } else {
            // Failed to create user
            return NULL;
        }
    }
    }
    public function createProfile($user_id $profile_image, $username,     $businessname,$town) {
    
    
    $stmt =$this->conn->query("SELECT  profile_id FROM profile ORDER BY profile_id ASC") ;
    
    $profile_id = 0;
    
    while($row = $stmt->fetch_array()){
        $profile_id = $row['profile_id'];
    }
    
    $path = "uploads/$profile_id.png";
    $actualpath = "https://localhost/GoodPriceApi/uploadImage/$path";
    
    // insert query 
    $stmt = $this->conn->prepare("INSERT INTO profile(user_id, profile_image, username, businessname, town) values(?, ?, ?, ?, ?)");
    $stmt->bind_param("issss",$user_id, $profile_image, $username, $businessname, $town);
    
    $result = $stmt->execute();
    
    $stmt->close();
    // Check for successful insertion
    if ($result) {
        file_put_contents($path,base64_decode($image));
    
        // User successfully inserted
       return $result;
    
       } else {
        // Failed to create user
        return NULL;
    }
    

    } ?>

    将电话号码插入用户和带有 json 的 Echo id。该文件名为 NewUser.php :

         <?php
      include './DbHandler.php';
     $db = new DBHandler();
    / json response array
      $response = array("error" => FALSE); 
       if (isset($_POST['phone'])) { 
        // receiving the post params
         $phone = $_POST['phone'];
      // get the user by phone
         $user = $db->createUser($phone);
         if ($user != false) {
            // use is found
        $response["error"] = FALSE;
        //  $response["uid"] = $user["unique_id"];
          $response["user"]["id"] = $user["id"];
          $response["user"]["phone"] = $user["phone"];
            echo json_encode($response);
       } else {
        // user is not found with the credentials
        $response["error"] = TRUE;
          $response["error_msg"] = "Sorry we could not find you ";
          echo json_encode($response);
        }
       } else {
    // required post params is missing
    $response["error"] = TRUE;
    $response["error_msg"] = "Required parameter phone is missing!";
      echo json_encode($response);
     }
      ?>
    

    用于获取json传递参数并插入手机给用户的Android Java方法:

         private void createuser(final String phone) {
            // Tag used to cancel the request
            String tag_string_req = "req_Verfication";
            StringRequest strReq = new StringRequest(Request.Method.POST,
                    Urls."127.0.0.1/myproject/NewUser.php", new Response.Listener<String>() {
    
                @Override
                public void onResponse(String response) {
                    Log.d(TAG, "cerfication Response: " + response.toString());
                    hideDialog();
    
                    try {
                        JSONObject jObj = new JSONObject(response);
                        boolean error = jObj.getBoolean("error");
    
                        // Check for error node in json
                         if (!error) {
    
                            JSONObject user = jObj.getJSONObject("user");
                           String phone = user.getString("phone");
                            String id = user.getString("id");
    
                       // pass id to another activity so that will be used as    user_id 
                       //     abfter being set on textView or on textfield and 
                        //you hide it on interface  then you convert it toString as user_id 
                            // finally you insert it in profile table with other parameters
                            // for more details send me email on :    mugwales@gmail.com
                         Intent i = new Intent(createuserAccount.this,     createuserprofile.class);
                                    i.putExtra("id", id);
                                    startActivity(i);
                                    finish();
    
                               }
    
                               } else {
                        // Error in verfication error message
                        String errorMsg = jObj.getString("error_msg");
    
                       Toast.makeText(getApplicationContext(),
                               errorMsg, Toast.LENGTH_LONG).show();            }
                   } catch (JSONException e) {
                    // JSON error
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), "Json error: " +   e.getMessage(), Toast.LENGTH_LONG).show();
                }
    
            }
        }, new Response.ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Verfication error Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_LONG).show();
            }
        })
    
        {
    
            @Override
            protected Map<String, String> getParams() {
    
                // Posting parameters to verfication url
                Map<String, String> params = new HashMap<String, String>();
                params.put("phone",phone);
                return params;
            }
            };
     //
     //        // Adding request to request queue
           AppController.getInstance().addToRequestQueue(strReq,  tag_string_req);
        }
    

    使用 create.php 文件将所有参数全部插入配置文件中:

    <?php 
     include './DbHandler.php';
     $db = new DbHandler();
    $response = array();
     if ((isset($_POST['user_id']) && (isset($_POST['profile_image']) &&     isset($_POST['username']) &&       isset($_POST['businessname']) &&   isset($_POST['town']))!= '') {
        $user_id= $_POST['user_id'];
        $profile_image = $_POST['profile_image'];
         $username = $_POST['username'];
        $businessname = $_POST['businessname'];
       $town = $_POST['town'];
    
    $res = $db->createProfile($user_id, $profile_image, $username, $businessname,$town);
    
    if ($res == USER_CREATED_SUCCESSFULLY) {      
        $response["error"] = false;
        $response["message"] = "Profile created successfully";
    } else if ($res == USER_CREATE_FAILED) {
        $response["error"] = true;
        $response["message"] = "Sorry! Error occurred during profile creation.";
    } 
    } 
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2016-04-09
      • 2020-06-09
      • 1970-01-01
      • 2012-07-13
      相关资源
      最近更新 更多