我要插入的2个变量是$ profitText和$ closedb。我尝试了两种方法,但都无济于事。请赐教!!
$mysqli-> query(
"UPDATE trade_history1 set close='{$closedb}'
WHERE `trade_id` = " . $trade_id);
$mysqli->query(
"UPDATE trade_history1 set profitandloss='" . addslashes($profittext) . "'
WHERE `trade_id` = '" . addslashes($trade_id) . "'");
///////
$mysqli->query(
"INSERT INTO `trade_history1` (
user_id, trade_id, selection, date, type, size, bidprice,
offerprice, stoploss, takeprofit,dateclose,close,profitandloss)
SELECT user_id, trade_id, selection, date, type, size, bidprice,
offerprice, stoploss, takeprofit, 'null','null','null'
FROM `opentrades`
WHERE `trade_id` = " . $trade_id);
$mysqli->query("UPDATE trade_history1
set dateclose=CURRENT_TIMESTAMP WHERE `trade_id` = " . $trade_id);
$mysqli->query("UPDATE trade_history1
set close='{$closedb}' WHERE `trade_id` = " . $trade_id);
$mysqli->query("UPDATE trade_history1
set profitandloss='" . addslashes($profittext) . "'
WHERE `trade_id` = '" . addslashes($trade_id) . "'");
$mysqli->query("DELETE FROM `opentrades` WHERE `trade_id` = " . $trade_id);
答案 0 :(得分:0)
“无济于事”并不是对发生的事情的非常有意义的描述。如果查询已发送到数据库但未成功处理,那么数据库会给您一条明确的错误消息,说明原因。
此外,您不应使用addslashes()来转义拼接成查询的值。将parameter binding与占位符或mysqli::real_escape_string()一起使用(尽管显式转换为整数也是整数数据类型的合理方法/枚举值的数组查找)。
在PHP和MySQL之间的边界进行调试时,最好查看并确切了解您的代码发送到数据库的SQL(虽然这在PHP端使用参数绑定不可见,但在数据库结束)。
此外,您应该在开发环境中确保PHP检测到的任何错误都可以在某处显示 - 也许您没有数据库连接?
从你提供的信息来看,没有办法说出它为何被破坏(SQL 看起来 OK)
答案 1 :(得分:0)
首先,不要使用mysql,而是使用PDO。请注意连接代码,这是必不可少的。
接下来,这是正确的方法:
$sql = "UPDATE trade_history1 set close=?, profitandloss=? WHERE trade_id = ?";
$stm = $pdo->prepare($sql);
$stm->execute(array($closedb,$profittext,$trade_id))
答案 2 :(得分:-1)
尝试单引号sql和双引号php变量,虽然我不确定你是否要插入变量或想要将变量评估插入db
答案 3 :(得分:-1)
首先,您可以在单个查询中更改多个列。因此,您的第一组和最后一组查询可以变为: -
$stmt = $mysqli->prepare("UPDATE trade_history1
set close=?, profitandloss=? WHERE trade_id = ?");
$stmt->bind_param('ssi', $closedb, addslashes($trade_id), $trade_id);
if ( ! $stmt->execute() ) {
// error processing code
}
与上一组更新类似: -
$stmt = $mysqli->prepare("UPDATE trade_history1
SET dateclose=NOW(), close=?, profitandloss=?
WHERE trade_id = ?";
$stmt->bind_param('ssi', $closedb, ddslashes($profittext), $trade_id);
if ( ! $stmt->execute() ) {
// error processing code
}
并创建历史查询: -
$stmt = $mysqli->prepare(
"INSERT INTO trade_history1 (user_id, trade_id, selection, date, type, size,
bidprice, offerprice, stoploss, takeprofit,dateclose,
close,profitandloss)
SELECT user_id, trade_id, selection, date, type, size, bidprice,
offerprice, stoploss, takeprofit, NULL, NULL, NULL
FROM opentrades
WHERE trade_id = ?";
$stmt->bind_param('i', $trade_id);
if ( ! $stmt->execute() ) {
// error processing code
}