将php变量插入/更新到数据库中

时间:2013-08-19 07:45:13

标签: php sql mysqli

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

我要插入的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);

4 个答案:

答案 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
}