0

I have a INSERT function where it inserts the image filename in the 'ImageFile' field in the "Image" table, each row has it's own ImageId thanks to auto number. An example of this is below:

ImageId    ImageFile

23         orange.jpg
24         flowers.png
25         castle.png
26         orange.jpg

What I want to do is also insert the ImageId into another table with the QuestionId and SessionId so that this table (Image_Question) can use the ImageId to link the Image table with the Image Question table. Now I am trying to use mysql_insert_id to retrieve the ImageId from the Image Table and store it in the ImageId in the Image_Question table.

But I can't seem to figure out what I need to do, at the moment the the INSERTING values into the Image Table is working fine but it does not insert any values inside the Image_Question table.

So my question is for each row inserted into the Image table, how do I retrieve the ImageId from the Image Table after it has been inserted into the Image Table, and insert it into the Image_Question table using mysql_insert_id()? Example below:

ImageId   SessionId  QuestionId

23        AAA        1
24        AAA        2
25        AAA        3
26        AAA        4

I have coded the INSERT values for SessionId and QuestionId but just need help retrieving and inserting the ImageId. Below is the current code:

      <?php

        session_start();


        //connect to db

        $result = 0;
        $i = 0;
        $insertimage = array();


                    move_uploaded_file($_FILES["fileImage"]["tmp_name"],
      "ImageFiles/" . $_FILES["fileImage"]["name"]);
      $result = 1;

        $imagesql = "INSERT INTO Image (ImageFile) 
        VALUES ('ImageFiles/".mysql_real_escape_string($_FILES['fileImage']['name'])."')";

    mysql_query($imagesql);

    for($i = 0;  $i < $c; $i++ ){


    $insertimage[] = "'". 
                    mysql_real_escape_string($_SESSION['id'] ) . 
                    ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'". 
                    mysql_real_escape_string( $_POST['numQuestion'][$i] ) ."'";

}

    $imageinsertsql .= "INSERT INTO Image_Question 
         (ImageId, SessionId, QuestionId) 
         VALUES 
         ((SELECT ImageId FROM Image ORDER BY ImageId DESC LIMIT 1),
          " . implode('), (', $insertimage) . ")";

          mysql_query($imageinsertsql);

              }

              mysql_close();

        ?>

I have an old php version 5.2.13 because that is the version of the university's server.

4

3 回答 3

0

你需要使用这个:SELECT LAST_INSERT_ID();

于 2012-06-07T07:27:51.063 回答
0

您需要提供要插入到表中的每条记录ImageId的子句。使用 PHP 的功能,可以调整你的循环如下:VALUESImage_Questionmysql_insert_id()for

for ($i = 0;  $i < $c; $i++) {
  $insertimage[] = mysql_insert_id()
  .", '".mysql_real_escape_string($_SESSION['id'] )
        .($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') . "'"
  .", '". mysql_real_escape_string( $_POST['numQuestion'][$i] ) . "'";
}

$imageinsertsql .= "INSERT INTO Image_Question 
  (ImageId, SessionId, QuestionId) 
  VALUES 
  (" . implode('), (', $insertimage) . ")";

但是,古老的 MySQL 扩展已不再维护,社区已开始弃用;您可以改用改进的MySQLi扩展或PDO抽象层,它们都支持准备好的语句,其中变量可以作为参数传递(不会针对 SQL 进行评估,因此不需要转义)。例如,使用 PDO:

$dbh = new PDO("mysql:dbname=$db;charset=utf8", $username, $password);

$qry = $dbh->prepare('INSERT INTO Image (ImageFile) VALUES (?)');
$qry->execute(array("ImageFiles/{$_FILES['fileImage']['name']})"));

$qry = $dbh->prepare('INSERT INTO Image_Question (ImageId, SessionId, QuestionId) 
                      VALUES (:ImageId, :SessionId, :QuestionId)');

$qry->bindValue(':ImageId', $dbh->lastInsertId());
$qry->bindValue(':SessionId', $_SESSION['id'] .
                 ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '')
               );

$qid = null;
$qry->bindParam(':QuestionId', $qid);
foreach ($_POST['numQuestion'] as $qid) $qry->execute();
于 2012-06-07T08:05:40.900 回答
-1

试试这个查询。

$imagesql = "INSERT INTO Question 
         (ImageId, SessionId, QuestionId) 
         VALUES 
         ((SELECT ImageId FROM image ORDER BY ImageId DESC LIMIT 1),
          " . implode('), (', $insertimage) . ")";
于 2012-06-07T07:31:04.117 回答