2012-06-07 5 views
0

У меня есть функция INSERT, где она вставляет имя файла изображения в поле «ImageFile» в таблице «Изображение», каждая строка имеет собственный ImageId, благодаря автоматическому номеру. Примером этого является ниже:Почему данные не вставлены в базу данных mysql, используя php?

ImageId ImageFile 

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

То, что я хочу сделать, это также вставить ImageID в другую таблицу с QuestionID и SESSIONID так, что эта таблица (Image_Question) можно использовать ImageID связать таблицу изображения с Image Question table. Теперь я пытаюсь использовать mysql_insert_id для извлечения ImageId из таблицы изображений и сохранения его в ImageId в таблице Image_Question.

Но я не могу понять, что мне нужно сделать, в то время как значения INSERTING в таблице изображений работают нормально, но не вставляют никаких значений внутри таблицы Image_Question.

Итак, мой вопрос касается каждой строки, вставленной в таблицу изображений, как я могу извлечь ImageId из таблицы изображений после того, как она была вставлена ​​в таблицу изображений, и вставить ее в таблицу Image_Question с помощью mysql_insert_id()? Пример ниже:

ImageId SessionId QuestionId 

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

Я закодированы значения вкладышем для SESSIONID и QuestionID, но просто нужна помощь извлечения и вставки 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, потому что это версия сервера университета.

+0

Я думал, что это решение здесь? http://stackoverflow.com/questions/10915022/how-to-retrive-imageid-and-insert-it-into-another-table/10915261#10915261 – sephoy08

+0

Возможный дубликат [Как получить ImageId из одной таблицы db и сохранить это в другой таблице db] (http://stackoverflow.com/questions/10924346/how-to-retrieve-imageid-from-one-db-table-and-store-it-in-another-db-table) –

+0

Когда вы задаете вопрос «не работает», пожалуйста, напишите сообщения об ошибках, которые вы получите. Вам нужно включить параметры регистрации/регистрации ошибок PHP, такие как 'display_errors', если вы не видите ошибку. –

ответ

0

Вам необходимо использовать: SELECT LAST_INSERT_ID();

+0

так делает go 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 таблицу. Использование 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(); 
Смежные вопросы