0

一つだけ質問したいです。PHP 変数をデータベースに挿入する方法。

挿入したい 2 つの変数は、$profitText と $closedb です。2つの方法を試しましたが、どちらも役に立ちませんでした。教えてください!!

 $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

「役に立たなかった」というのは、何が起こったのかについてあまり意味のある説明ではありません。クエリがデータベースに送信され、正常に処理されなかった場合、データベースは理由を示す明示的なエラー メッセージを表示します。

さらに、クエリにスプライスする値をエスケープするために、addslashes() を使用しないでください。プレースホルダーまたは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

まず、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 に答える
-1

SQLを一重引用符で囲み、php変数を二重引用符で囲みますが、変数を挿入するか、変数評価をdbに挿入するかはわかりません

于 2013-08-19T08:13:38.657 に答える