0

我只想问一个问题。如何将 php 变量插入数据库。

我要插入的 2 个变量是 $profitText 和 $closeb。我尝试了两种方法,但都无济于事。请赐教!!

 $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);
4

4 回答 4

0

“无济于事”并不是对所发生事情的非常有意义的描述。如果查询被发送到数据库并且没有成功处理,那么数据库会给你一个明确的错误消息,说明原因。

此外,您不应使用 addlashes() 来转义拼接到查询中的值。使用带有占位符或mysqli::real_escape_string()的参数绑定(尽管显式转换为整数也是整数数据类型/枚举值的数组查找的合理方法)。

在 PHP 和 MySQL 之间的边界进行调试时,最好查看并查看您的代码发送到数据库的确切 SQL(虽然这在 PHP 端使用参数绑定不可见,但在数据库端可见) .

此外,您应该确保在您的开发环境中 PHP 检测到的任何错误在某处可见 - 也许您没有数据库连接?

从您提供的信息来看,无法判断它为什么会损坏(SQL看起来不错)

于 2013-08-19T08:13:30.037 回答
0

首先,不要使用 mysql,而是使用PDO。请注意必不可少的连接代码。

接下来,这是正确的方法:

$sql = "UPDATE trade_history1 set close=?, profitandloss=? WHERE trade_id = ?";
$stm = $pdo->prepare($sql);
$stm->execute(array($closedb,$profittext,$trade_id))
于 2013-08-19T08:41:44.647 回答
-1

尝试单引号 sql 和双引号 php 变量,但我不确定是要插入变量还是要将变量评估插入数据库

于 2013-08-19T08:13:38.657 回答
-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
}
于 2013-08-19T08:40:35.743 回答