如何从一个查询中获取值并将其分配给另一个查询

时间:2013-04-17 05:47:14

标签: php mysql

我在 mysql 数据库中有两个表:

  1. 汽车信息
  2. 汽车图片
  3. 这两个表值均由单个表单填充。在Car表中,我有一个名为'CarImageID'的字段,它是一个具有自动增量的主键,而且在images表中我有相同的字段'CarImageID'但是FK没有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';
              }           
    

    }

5 个答案:

答案 0 :(得分:1)

待办事项

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

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

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

如果你有多个查询并且不想有机会混淆它们,第二种方法很有用。

答案 1 :(得分:0)

不要使用mysql函数使用mysqli

如果你使用mysqli使用

$id = $mysqli->insert_id;

在当前功能中您可以使用

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

使用此ID在下一个查询中插入。

答案 2 :(得分:0)

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

如此更改

 mysql_query($imagequery);

<强>在

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

现在您的变量存储在last_entry_id中,您可以在第二个查询中使用

我还想记住,mysql_函数已被弃用,因此我建议您切换到mysqliPDO以获取新项目。

答案 3 :(得分: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) 

答案 4 :(得分:0)

您无需在CarImageID插入,因为它是自动增量列。 如果你有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) CarID是PK并自动增加。其中CarImages(CarID, CarImageID, ImageName, ImagePath)为FK且CarIDCarImageID的{​​{1}}为自动递增。 您应首先插入CAR表,然后使用CarID获取mysql_insert_id()并将此ID用于INSERT到CarImages表。