如何将主键作为外键插入另一个表?

时间:2016-08-02 13:45:09

标签: php mysql

我有两张桌子 tbl_carstbl_user tbl_user userIDPrimary key的位置tbl_cars 我在tbl_cars上将其声明为外键 每当用户登录时,都无法将项目发布到<?PHP $conn = new mysqli('******', '******', '******', '******'); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } error_reporting(E_ALL); ini_set('display_errors',1);// at top of page if(isset($_POST['txtCarModel']) && isset($_POST['txtCarType']) && isset($_POST['txtCapacity']) && isset($_POST['image']) && isset($_POST['txtFuelType']) && isset($_POST['txtPlateNumber'])){ $now = DateTime::createFromFormat('U.u', microtime(true)); $id = $now->format('YmdHis'); $upload_folder = "upload"; $path = "$upload_folder/$id.jpeg"; $image = $_POST['image']; $fullpath = "http://carkila.esy.es/$upload_folder/$id.jpeg"; $Car_Model = $_POST['txtCarModel']; $Car_Type = $_POST['txtCarType']; $Capacity = $_POST['txtCapacity']; $Fuel_Type = $_POST['txtFuelType']; $PlateNumber = $_POST['txtPlateNumber']; $Image = $_POST['image']; $stmt = $conn->prepare("INSERT INTO tbl_cars (Car_Model, Car_Type, Capacity, fuelType, carPlatenuNumber, Image) VALUES (?, ?, ?,?,?,?)"); $query = "INSERT INTO tbl_cars(Car_Model, Car_Type, Capacity,fuelType, carPlatenuNumber, Image) VALUES ('$Car_Model', '$Car_Type', $Capacity, '$Fuel_Type', '$PlateNumber', '$fullpath')"; $stmt->bind_param("ssssss", $Car_Model, $Car_Type, $Capacity,$Fuel_Type,$PlateNumber, $fullpath); $result = $stmt->execute(); if($result === false ) { die('execute() failed: ' . htmlspecialchars($stmt->error)); }else{ echo "New records created successfully"; } $stmt->close(); $conn->close(); } ?> 我收到此错误

  

无法添加或更新子行:外键约束失败   (u850332371_car.tbl_cars,CONSTRAINT tbl_cars_ibfk_1 FOREIGN KEY   (userID)REFERENCES tbl_user(userID))

这是我的插入代码。

Insert.php

<?php 
require 'database-config.php';

session_start();

$username = "";
$password = "";

if(isset($_POST['username'])){
$username = $_POST['username'];
}
if (isset($_POST['password'])) {
$password = $_POST['password'];

}


$q = 'SELECT * FROM tbl_user WHERE username=:username AND password=:password';

$query = $dbh->prepare($q);

$query->execute(array(':username' => $username, ':password' => $password));


if($query->rowCount() == 0){
header('Location: index.php?err=1');
}else{

$row = $query->fetch(PDO::FETCH_ASSOC);

session_regenerate_id();
 $_SESSION['sess_user_id'] = $row['userID'];
 $_SESSION['sess_username'] = $row['username'];
 $_SESSION['sess_userrole'] = $row['roles'];

 echo $_SESSION['sess_userrole'];
session_write_close();

if( $_SESSION['sess_userrole'] == "renter"){
echo "owner";

}else if ($_SESSION['sess_userrole'] == "owner"){
echo"renter";

}


}


?>

更新

这是我的会话登录。我希望userID可以在数据库中插入数据。

的login.php

  <div ng-repeat="it in model.imageTones" ng-class="it.CPosition" ng-if="!it.hidden" >
    <img ng-src="http://www.absolutepitchstudy.com/animalgame/content/images/{{it.Image.ImageFileName}}" />

  </div>

谢谢你们。 :)

1 个答案:

答案 0 :(得分:0)

  

每当用户登录时,都无法发布项目......

由于您知道哪个用户尝试将记录添加到tbl_cars,因此请在插页中添加userID

$userID = ... //<- put the user id in this variable
$sql = 'INSERT INTO tbl_cars ('.
       'userID,Car_Model,Car_Type,Capacity,fuelType,carPlatenuNumber,Image'.
       ') VALUES (?, ?, ?, ?, ?, ?, ?)';

$stmt = $conn->prepare($sql);
$stmt->bind_param("sssssss", $userID $Car_Model, $Car_Type, $Capacity,
                             $Fuel_Type,$PlateNumber, $fullpath);
$result = $stmt->execute();

我认为您的问题是userID是必填字段,但是当您没有提供默认值时,数据库无法为您插入默认值,因为该值必须绑定到{中的主键{1}}