为什么Data没有使用php插入mysql数据库?

时间:2012-06-07 07:23:18

标签: php mysql

我有一个INSERT函数,它在“Image”表的“ImageFile”字段中插入图像文件名,由于自动编号,每行都有自己的ImageId。下面是一个例子:

ImageId    ImageFile

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

我想要做的是将ImageId插入另一个带有QuestionId和SessionId的表中,以便该表(Image_Question)可以使用ImageId将Image表与Image Question表链接。现在我尝试使用mysql_insert_id从Image Table中检索ImageId并将其存储在Image_Question表中的ImageId中。

但我似乎无法弄清楚我需要做什么,目前在图像表中的INSERTING值工作正常但它没有在Image_Question表中插入任何值。

所以我的问题是插入到Image表中的每一行,如何将ImageId插入Image Table后从Image Table中检索ImageId,并使用mysql_insert_id()将其插入Image_Question表? 示例如下:

ImageId   SessionId  QuestionId

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

我已经编写了SessionId和QuestionId的INSERT值,但只需要帮助检索和插入ImageId。以下是当前代码:

      <?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();

        ?>

我有一个旧的PHP版本5.2.13,因为这是大学服务器的版本。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您需要为插入ImageId表的每条记录的VALUES子句提供Image_Question。使用PHP的mysql_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扩展,并且社区已经开始deprecation process;您可以使用改进的MySQLi扩展或PDO抽象层,它们都支持prepared statements变量可以作为参数传递(不会对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();

答案 2 :(得分:-1)

尝试此查询。

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