2013-08-11 5 views
0

Я попытался использовать способ вставки в нужную таблицу select * from XXX, а затем удалить ее, но я просто не могу вставить в свою новую таблицу и удалить ее в старой таблице.Как перенести строку из одной таблицы в другую?

Он читает trade_id как 1,2,3,4, но, похоже, я не могу его удалить. В строке 4, trade_id есть ошибка, которую я не могу понять, почему она не определена.

Есть ли что-то не так с запросом?

Delete.php

<?php 

     // we need to know the student id so that we can delete the right student 
     $tradeid= $_GET['trade_id']; 

     // the file that contains your database credentials like username and password 
     require_once('connect.php'); 

     // see Lecture Webp_Week13_14_Using_PHPandMySQL(updating).pptx Slide 4 aka Step 1 
     $mysqli = new mysqli($database_hostname, $database_username, $database_password, $database_name) or exit("Error connecting to database"); 

     // Slide 5 aka Step 2 
     $stmt = $mysqli->multi_query("INSERT INTO `trade_history1` (session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss, dateclose, close) 
     SELECT session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss, dateclose, close 
     FROM `opentrades` 
     WHERE `trade_id` = ?; 

      DELETE FROM `opentrades` WHERE `trade_id` = ?; 
      COMMIT;"); 

     // Slide 6 aka Step 3 the bind params must correspond to the ? 
     $stmt->bind_param("i", $tradeid); // 1 ? so we use i. we use i because id is INT 

     // Slide 7 aka Step 4 
     $successfullyDeleted = $stmt->execute(); 

     // Slide 8 aka Step 5 
     // we won't check the delete result here. 

     // Slide 9 aka Step 6 and 7 
     $stmt->close(); 

     $mysqli->close(); 

     // if we successfully delete this, we 
     if ($successfullyDeleted) { 
      $_SESSION['message'] = 'Successfully deleted'; 
     } else { 
      $_SESSION['message'] = 'Unable to delete'; 
     } 

     header('Location: js.php'); 

?> 

Важная часть кода

JS.php

while($row = mysql_fetch_array($result)){ //Creates a loop to loop through results 
    echo "<tr><td>" . $row['trade_id'] . "</td><td>" . $row['selection'] . "</td><td>" . $row['date'] ."</td><td>" . $row['type'] ."</td><td>" . $row['size'] ."</td><td>" . $row['bidprice'] ."</td><td>" . $row['offerprice'] ."</td><td>" . $row['stoploss'] ."</td><td>" . $row['takeprofit'] ."</td><td>" . $row['profitandloss'] . "</td><td><a href ='delete.php?id=".$row['trade_id']."'>X</a></td></tr>"; //$row['index'] the index here is a field name 
} 
+0

вы можете отправить только один запрос при использовании 'mysql_query' –

+0

Вы можете запускать _one_-запрос только в вызове mysql_query()', поэтому используйте 2 отдельных вызова, предпочтительно в транзакции). Кроме того, не используйте функции _deprecated_ 'mysql_ *', поэтому в руководстве есть предупреждение. – Wrikken

+0

так что я использую вместо mysql –

ответ

1

mysqli::multi_queryпреформ запроса (один или несколько запросов) в базе данных. Он не создает подготовленный оператор (например, mysqli::prepare), который будет использоваться с mysqli_stmt::bind_param и выполнен с mysqli_stmt::execute. Кроме того, query parameter в подготовленном операторе должен состоять из одного оператора SQL.

Вы должны сделать операцию таким образом (взяты из PHP + MySQL transactions examples) (Нет подготовленных заявлений!):

$tradeid= filter_var($_GET['trade_id'], FILTER_SANITIZE_NUMBER_INT); 
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->begin_transaction(); 

    // 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, profitandloss, dateclose, close) 
    SELECT session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss, dateclose, close 
    FROM `opentrades` 
    WHERE `trade_id` = " . $tradeid); 
    $mysqli->query("DELETE FROM `opentrades` WHERE `trade_id` = " . $tradeid); 

    // 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(); 
} 
$mysqli->close(); 
... 

или с подготовленными операторами (от How can I use prepared statements combined with Transactions with PHP?):

$tradeid= $_GET['trade_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->begin_transaction(); 

    // A set of queries; if one fails, an exception should be thrown 
    $stmt = $mysqli->stmt_init(); 
    $stmt = $stmt->prepare("INSERT INTO `trade_history1` (session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss, dateclose, close) 
    SELECT session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss, dateclose, close 
    FROM `opentrades` 
    WHERE `trade_id` = ?"); 
    $stmt->bind_param("i", $tradeid); 
    $stmt->execute(); 

    $mysqli->query("DELETE FROM `opentrades` WHERE `trade_id` = ?"); 
    $stmt->bind_param("i", $tradeid); 
    $stmt->execute(); 

    // 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(); 
} 
$mysqli->close(); 
... 
+0

так .... как я его исправить? –

+0

Существует проблема с BeginTransaction(), и торговый идентификатор не определен. где может быть проблема? Это мой личный проект, над которым я работаю довольно долгое время! –

+0

trade_id - это переменная GET, которая должна быть найдена в URL-адресе, запрошенном как http://example.com?trade_id=0 – Mohsenme

Смежные вопросы