У меня есть две таблицы users
И requests
. Таблица пользователей имеет столбцы: id
, username
, password
и town
. Я могу вставить данные в users
. requests
таблица имеет: id
, user_id
, product_name
, proposed_price
и request_description
, где user_id
является внешним ключом к реферирование id
из users
таблицы. Проблема заключается в том, что данные вставки не выполняются в таблице requests
, которая имеет user_id
в качестве внешнего ключа. Я получаю сообщение об ошибке:Как вставить с помощью внешнего ключа в дочерней таблицы PHP
Undefined variable: user_id and mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement on line : $qry->bind_param("i", $user_id);
Эта функция должна быть использована в вставки:
public function User_request ($product_name, $proposed_price, $request_description) {
$qry = $this->conn->prepare("SELECT id FROM users WHERE id = '$user_id' ");
$qry->bind_param("i", $id);
$result= $qry->execute();
$user_id = $qry->num_rows();
$qry->close();
if($user_id > 0){
$stmt = $this->conn->prepare("INSERT INTO requests (user_id, product_name, proposed_price, request_description) VALUES(?, ?, ?, ?)");
$stmt->bind_param("sss",$user_id, $product_name, $proposed_price, $request_description);
$result = $stmt->execute();
$stmt->close();
// check for successful store
if ($result) {
$stmt = $this->conn->prepare("SELECT * FROM requests WHERE request_description = ?");
$stmt->bind_param("s", $request_description);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
return $user;
} else {
return false;
}
}
}
И ниже код вызывает выше функции:
<?php
include './DbHandler.php';
$db = new DBHandler();
// json response array
$response = array("error" => FALSE);
if (isset($_POST['product_name']) && isset($_POST['proposed_price']) && isset($_POST['request_description'])) {
// receiving the post params
$product_name = $_POST['product_name'];
$proposed_price =$_POST['proposed_price'];
$request_description =$_POST['request_description'];
// create a new request
$user = $db-User_request($product_name, $proposed_price, $request_description);
if ($user) {
// user stored successfully
$response["error"] = FALSE;
$response["user"]["username"] = $user["username"];
$response["user"]["proposed_price"] = $user["proposed_price"];
$response["user"]["request_description"] = $user["request_description"];
echo json_encode($response);
} else {
// user failed to store
$response["error"] = TRUE;
$response["error_msg"] = "oops error occured!";
echo json_encode($response);
}
}
else {
$response["error"] = TRUE;
$response["error_msg"] = "Required parameters are missing!";
echo json_encode($response);
}
?>
Ответ такой же: http://stackoverflow.com/questions/39619591/how-to-get-last-auto-increment-value-as-foreign-key-to-another-table-in -php/43539268 # 43539268 –