2013-08-12 6 views
0

Comment puis-je obtenir la requête pour insérer ma ligne d'une table à une autre? J'utilise l'insert traditionnel select delete. Maintenant, la chose qui fonctionne est la suppression du commerce. Cependant, les valeurs ne sont pas mises à jour dans la nouvelle table. J'ai utilisé une constante dans la deuxième table parce que les tables ont des colonnes sans correspondance, quel pourrait être le problème ici?Insertion dans la base de données

<?php 
//If(!isset($trade_id)){ 
     $trade_id= $_GET['id']; 

//} 

require_once('connect.php'); 
$mysqli = new mysqli($database_hostname, $database_username, $database_password, $database_name) or exit("Error connecting to database"); 
try { 
    // First of all, let's begin a transaction 
    $mysqli->autocommit(FALSE); 

    // A set of queries; if one fails, an exception should be thrown 
    $mysqli->query("INSERT INTO `trade_history1` (session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit,dateclose,close, profitandloss) 
    SELECT session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss,'null','null' 
    FROM `opentrades` 
    WHERE `trade_id` = " . $trade_id); 
    $mysqli->query("DELETE FROM `opentrades` WHERE `trade_id` = " . $trade_id); 

    // If we arrive here, it means that no exception was thrown 
    // i.e. no query has failed, and we can commit the transaction 
    $mysqli->commit(); 
    $_SESSION['message'] = 'Successfully deleted'; 
} catch (Exception $e) { 
    // An exception has been thrown 
    // We must rollback the transaction 
    $_SESSION['message'] = 'Unable to delete'; 
    $mysqli->rollback(); 

} 


     // if we successfully delete this, we 
$mysqli->close(); 

// bid price,offer price, size,type, 
header('location:js.php'); 
?> 
+1

Vous ne vérifiez pas le code retour de 'query'. Êtes-vous sûr qu'il va lancer une exception en cas d'échec? http://stackoverflow.com/questions/14578243/turning-query-errors-to-exceptions-in-mysqli – rutter

+0

Je suggérerais de répercuter la requête et de l'exécuter directement dans la base de données. Est-ce que ça marche? Vous ne vérifiez pas non plus les valeurs de retour de vos appels 'query()', vous ne savez donc pas si quelque chose échoue. – andrewsi

Répondre

0
use following code 
     mysqli_execute();instead of mysqli_query(); 



      $mysqli->execute("INSERT INTO `trade_history1` (session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit,dateclose,close, profitandloss) 
SELECT session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss,'null','null' 
FROM `opentrades` 
WHERE `trade_id` = " . $trade_id); 
$mysqli->execute("DELETE FROM `opentrades` WHERE `trade_id` = " . $trade_id); 
+0

Est-ce que cela n'exécute pas une instruction préparée? – andrewsi

+0

execute n'est pas défini. –

+0

'Utiliser ce qui suit' n'est pas une réponse. Pourquoi ne décrivez-vous pas ce qui ne va pas avec la question OP et expliquez pourquoi. – UnholyRanger

0

Je ne sais pas sur les constantes dans la requête SQL, mais il semble l'ordre d'insertion et de sélection dans la requête que vous utilisez quatre dernières comme:

takeprofit, dateclose, close, profitandloss 

devrait être pour

takeprofit, 'null', 'null', profitandloss 
+0

Ok merci, j'ai édité ça! mais l'insertion ne se fait toujours pas, où pourrait être le problème? –

0

Une requête qui échoue ne génère pas d'exception. Vous avez l'écho de cette requête et l'exécutez dans phpmyadmin. Comme ça, vous pouvez forer au fond.

Vous devez utiliser mysqli_error() pour vérifier si la requête d'insertion a été exécutée correctement avant de supprimer la ligne.

Questions connexes