[英]How to transfer a row from one table to another?
我嘗試過使用插入到所需表中的方法, select * from XXX
中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
}
mysqli :: multi_query對數據庫執行一個查詢(一個或多個查詢)。 它不會創建要與mysqli_stmt :: bind_param一起使用並與mysqli_stmt :: execute執行的准備好的語句(如mysqli :: prepare )。 此外,prepared語句中的查詢參數必須包含一個SQL語句。
您應該以這種方式執行事務(沒有准備好的語句!)(取自PHP + MySQL事務示例 ):
$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();
...
或帶有預准備語句(來自如何將預准備語句與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();
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.