2017-05-14 123 views
0

我试图做到哪里有FK在表中插入,但它不工作..PHP的MySQL插入有多个外键

我的数据库名字bd_telefonos

我的数据库看起来像这样的:

表MARCAS

idmarcas --> PK AI

nombre

sistemas_operativos

idsistemas_operativos -->PK AI

nombre

telefonos

modelo

idtelefonos --> PK AI

resolucion_alto

resolucion_ancho

peso

bateria

marcas_idmarcas --> FK

sistemas_operativos_idsistemas_operativos -- > FK

我的PHP是这样的:

<?php 

include_once('conexion/conexion.php'); 
$con = new conectar(); 

$modelo= $_POST['modelo']; 
$alto= $_POST['alto']; 
$ancho= $_POST['ancho']; 
$peso= $_POST['peso']; 
$bateria= $_POST['bateria']; 
$nombresis = $_POST['nombresis']; 
$nombremarca = $_POST['nombremarca']; 



$sSql = "INSERT INTO `bd_telefonos`.`telefonos` (`modelo`, `resolucion_alto`, `resolucion_ancho`, `peso`, `bateria`) VALUES ('$modelo', '$alto', '$ancho', '$peso', '$bateria')"; 

if(!mysqli_query($con->conectarse(), $sSql)){ 
     $resp = 'error '; 


    } 
    else{ 

     /*============================================================================= 
     =   select recently insert   = 
     =============================================================================*/ 

     $sSqlId = "SELECT MAX(id) as `id` FROM `bd_telefonos`.`telefonos`"; 

     if($respuesta = mysqli_query($con->conectarse(), $sSqlId)){ 
      foreach ($respuesta as $resp) { 
       $id = $resp['id']; 
      } 
     } 

     /*======================================================== 
     =   Insert sistemas_operativos   
     ========================================================*/ 

     $sSqlMas = "INSERT INTO `bd_telefonos`.`sistemas_operativos` (`idsistemas_operativos`, `nombre`) VALUES ('$id', '$nombresis')"; 

     if (mysqli_query($con->conectarse(), $sSqlMas)) { 
      $resp = 'success'; 
      echo $resp; 
     } else { 
      $resp = 'error'; 
      echo $resp; 
     } 


     /*======================================================== 
     =   Insert marcas    
     ========================================================*/ 


     $sSqlMass = "INSERT INTO `bd_telefonos`.`marcas` (`idmarcas`, `nombre`) VALUES ('$id', '$nombremarca')"; 
     if (mysqli_query($con->conectarse(), $sSqlMass)) { 
      $resp = 'success'; 
      $resp = 'error'; 

      echo $resp; 
     } 

    } 

    mysqli_close($con->conectarse()); 




?> 

它不工作,它只是没有在我的表telefonos使插入,我做错了什么?

帮助请:(

+0

“它不工作”是一个相当不精确的是观察到的行为的描述。一些建议...使用'mysqli_error'从MySQL检索错误消息,并显示错误或记录它。此外,用于检索刚刚插入的行的id值的“select max(id)”模式将在测试中起作用,但它是并发会话的基本断点模式。该代码似乎也容易受到SQL注入的影响。 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – spencer7593

回答

1

使用$ conn-> INSERT_ID而不是MAX(ID)。

$conn = new mysqli("hostname", "db_user_name", "db_password", "db_name"); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$modelo= $_POST['modelo']; 
$alto= $_POST['alto']; 
$ancho= $_POST['ancho']; 
$peso= $_POST['peso']; 
$bateria= $_POST['bateria']; 
$nombresis = $_POST['nombresis']; 
$nombremarca = $_POST['nombremarca']; 



$sSql = "INSERT INTO `telefonos` (`modelo`, `resolucion_alto`, `resolucion_ancho`, `peso`, `bateria`) VALUES ('$modelo', '$alto', '$ancho', '$peso', '$bateria')"; 

if ($conn->query($sSql) === TRUE) { 
    $id = $conn->insert_id; 

    /*======================================================== 
    =   Insert sistemas_operativos 
    ========================================================*/ 

    $sSqlMas = "INSERT INTO `sistemas_operativos` (`idsistemas_operativos`, `nombre`) VALUES ('$id', '$nombresis')"; 

    if ($conn->query($sSqlMas) === TRUE) { 
     echo 'success'; 
     $sistemas_operativos_id = $conn->insert_id; 
    } else { 
     echo "Error: " . $sSqlMas . "<br>" . $conn->error; 
    } 

    /*======================================================== 
    =   Insert marcas 
    ========================================================*/ 

    $sSqlMass = "INSERT INTO `marcas` (`idmarcas`, `nombre`) VALUES ('$id', '$nombremarca')"; 

    if ($conn->query($sSqlMass) === TRUE) { 
     echo 'success'; 
     $marcas_id = $conn->insert_id; 
    } else { 
     echo "Error: " . $sSqlMass . "<br>" . $conn->error; 
    } 

    /************** Update FK ***************/ 
    $update_sql = "UPDATE telefonos SET marcas_idmarcas ='$marcas_id', sistemas_operativos_idsistemas_operativos ='$sistemas_operativos_id' WHERE idtelefonos = '$id'"; 
    if ($conn->query($update_sql) === TRUE) { 
     echo 'Successfully Update'; 
    } else { 
     echo "Error: " . $update_sql. "<br>" . $conn->error; 
    } 


} else { 
    echo "Error: " . $sSql . "<br>" . $conn->error; 
} 

$conn->close(); 
+0

我得到这个错误:'错误:INSERT INTO'telefonos'('modelo','resolucion_alto','resolucion_ancho' ('g','g','g','g','g') 无法添加或更新子行:外键约束失败('bd_telefonos')。 ''telefonos',CONSTRAINT'fk_telefonos_marcas' FOREIGN KEY('marcas_idmarcas')参考'marcas'('idmarcas')ON DELETE NO ACTION ON UPDATE NO ACTION)' – User100696

+0

解决了!谢谢。 – User100696

0

是否要更新下面两个列在表telefonos

marcas_idmarcas --> FK 
sistemas_operativos_idsistemas_operativos -- > FK 

你可以从两个表中获得最后一个插入值并在telefonos表中更新