0

我在mysql数据库中有两个表,它们是:

  1. 汽车信息
  2. 汽车的图像

这两个表值都由一个表格填写。在 Car 表中,我有一个字段,其名称'CarImageID'是具有自动增量的主键,并且在 images 表中,我有相同的字段'CarImageID',但 FK 具有 NOT UNIQE INDEX。我想要的是每当我按下提交按钮时,第二个查询从第一个查询中获取它的值。我也创造了他们之间的关系。如何从 Imagequery 中获取 CarImageID 并在我的第二个查询中使用它,即 CarInfoQuery?。

<?php

require_once('db.php');
    @$CarID=$_POST['CarID'];
    @$CarName=$_POST['pname'];
    @$CarModel=$_POST['pstatus'];
if(isset($_FILES['file_upload']))
{

$shuff=str_shuffle("ABD6565LSLFKDSAJFD");
mkdir("upload/$shuff");
$files=$_FILES['file_upload'];

for($x = 0; $x < count($files['name']); $x++)
{
  $name=$files['name'][$x];
  $tmp_name=$files['tmp_name'][$x];
     if(move_uploaded_file($tmp_name, "upload/$shuff/".$name))
     {
      $imagequery="INSERT INTO CarImages(CarImageID, ImageName, ImagePath) 

      VALUES(‘ ’, '$name', 'upload/$name')";

      mysql_query($imagequery);

            echo 'Image '. $name .' Uploaded Successfully <br>';

     }
     else
     {
         echo 'uploading failed';
     }

}
$carinfoquery="INSERT INTO Car(CarID, CarName, CarModel, CarImageID)

         VALUES('// this value should take its value from first query', '$CarName', '$CarModel', 'CarImageID')";

          mysql_query($carinfoquery)  or die(mysql_error());

          if($carinfoquery)
          {
              echo '<br><br> The Car Information Insertion was 
                              Successfully <br><br>';
          }
          else
          {
              echo '<br><br> Car Insertion Failed';
          }           

}

4

5 回答 5

1

  mysql_query($imagequery);
  $carimageid = mysql_insert_id();

或者为了安全起见,请使用 mysql_query 资源:

$res = mysql_query($imagequery);
$carimageid = mysql_insert_id($res);

如果您有多个查询并且不想遇到将它们混淆的机会,则第二种方法很有用。

于 2013-04-17T05:53:01.543 回答
0

您不需要插入 at CarImageID,因为它是 Auto-increment 列。如果你得到Warning: mysql_insert_id() expects parameter 1 to be resource, boolean... 它意味着你的INSERT语句失败,所以用它die(mysql_error()来查找问题。

$imagequery="INSERT INTO CarImages(ImageName, ImagePath) VALUES('$name', 'upload/$name')";
mysql_query($imagequery) or die(mysql_error());
$id = mysql_insert_id($res);

编辑1:

我认为你的表结构有问题。一辆车可能有多个图像。所以表结构应该是这样的: Car(CarID, CarName, CarModel)CarIDPK和自增。CarImages(CarID, CarImageID, ImageName, ImagePath)CarID是 FK 并且CarImageID是自动增量的。您应该首先 INSERT into CARtable,然后获取CarIDmysql_insert_id()使用此 id 将 INSERT into CarImagestable。

于 2013-04-17T06:52:47.480 回答
0

不要使用 mysql 函数使用 mysqli

如果你使用 mysqli 使用

$id = $mysqli->insert_id;

在当前功能中您可以使用

$res = mysql_query($imagequery);
$id = mysql_insert_id($res);

使用此 id 插入下一个查询。

于 2013-04-17T05:53:50.710 回答
0

second insert query您必须在检索最后一个条目 ID之前添加一个查询,因为您没有在第一个查询中指出它,只是让数据库根据最后一个条目处理它(这是因为它是一个自动增量字段)

所以改变

 mysql_query($imagequery);

 $lastid = mysql_query($imagequery);
 $last_entry_id = mysql_insert_id($lastid);

现在你已经存储了你的变量last_entry_id,你可以在第二个查询中使用

我还想提醒您,mysql_功能已被弃用,因此我建议您切换到新项目mysqliPDO进行新项目。

于 2013-04-17T05:54:40.233 回答
0

获取插入ID

$res = mysql_query($imagequery);
$carimageid = mysql_insert_id();

如果 db col CarImageID 值为 $carimageid 然后

$carinfoquery="INSERT INTO Car(CarID, CarName, CarModel, CarImageID)

         VALUES('// this is CarID if col is auto_increment ,blank this', '$CarName', '$CarModel', '$carimageid')";

然后使用 if($run_query) 而不是 if($carinfoquery)

     $run_query =  mysql_query($carinfoquery)  or die(mysql_error());

          if($run_query)
          {
              echo '<br><br> The Car Information Insertion was 
                              Successfully <br><br>';
          }
          else
          {
              echo '<br><br> Car Insertion Failed';
          }

更新表结构可能是

Car(CarID, CarName, CarModel)
CarImages(CarImageID, ImageName, ImagePath,CarID) 
于 2013-04-17T06:02:12.533 回答