2012-06-07 95 views
0

我有一個插入圖像文件名在'ImageFile'表中的'ImageFile'字段的INSERT函數,每一行都有自己的ImageId感謝自動編號。這方面的一個例子如下:爲什麼數據沒有被插入到MySQL數據庫使用PHP?

ImageId ImageFile 

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

我想要做的也是插入圖像標識與QuestionId和SessionID的另一個表,該表(Image_Question)可以使用圖像標識的圖像表的鏈接圖片問題表。現在我試圖使用mysql_insert_id從Image Table中檢索ImageId並將其存儲在Image_Question表中的ImageId中。

但我似乎無法弄清楚我需要做什麼,此刻插入圖像表的INSERTING值工作正常,但它不會在Image_Question表中插入任何值。

所以我的問題是插入到圖像表中的每一行,如何從圖像表插入圖像表後將ImageId檢索到,並使用mysql_insert_id()將其插入到Image_Question表中?下面 例子:

ImageId SessionId QuestionId 

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

我已編碼的SessionID和QuestionId的INSERT值,但只需要幫助檢索和插入圖像標識。以下是當前的代碼:

 <?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,因爲那是大學的服務器版本。

+0

我以爲這在這裏解決了? http://stackoverflow.com/questions/10915022/how-to-retrive-imageid-and-insert-it-into-another-table/10915261#10915261 – sephoy08

+0

可能的重複[如何從一個數據庫表和商店檢索ImageId它在另一個數據庫表](http://stackoverflow.com/questions/10924346/how-to-retrieve-imageid-from-one-db-table-and-store-it-in-another-db-table) – 2012-06-07 07:30:59

+0

當你問一個「不工作」類型的問題時,請發佈你得到的任何錯誤信息。如果您沒有看到錯誤,則需要啓用PHP錯誤報告/日誌記錄設置,例如'display_errors'。 –

回答

0

你需要使用這個: SELECT LAST_INSERT_ID();

+0

也是這樣去SELECT LAST_INSERT_ID($ lastimageid);?或SELECT LAST_INSERT_ID(ImageId)? – user1394925

+0

'while($ someArray){ \t $ res = mysql_query('INSERT INTO ImagesTable SET imageName =「karumburum.jpg」'); \t $ id = mysql_query('SELECT LAST_INSERT_ID();'); \t $ res2 = mysql_query('INSERT INTO OtherTable SET imageId ='。$ id。',otherColumn =''。$ somedata。'「'); }' – luther

-1

試試這個查詢。

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

我不需要'$ lastimageid = mysql_insert_id();'? – user1394925

+0

是的。這將完成這項工作。 – sephoy08

+0

我仍然無法得到它插入數據到Image_Question表,我已經更新代碼,其中包括您的查詢,我發現你剛剛說過需要mysql_insert_id(),所以我的問題是我在哪裏放置mysql_insert_id ()代碼,你爲什麼認爲它沒有將數據插入數據庫? (我查過查詢,並且在任一查詢中都沒有拼寫錯誤) – user1394925

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(); 
相關問題