0

MySQLI と PHP を使用してテーブル内の情報を更新しようとしています。print_r()とを使用しvar_dump()て多くの場所で何かが存在することを確認したため、データが更新セクションに到達していることはわかっていますが、テーブルでは何も変更されていません。これが私のアップデート用のものです:

$conn->query("update inventory set cost = $cost, csmt = $csmt, 
    hold = {$data[$n]['hold']}, commission_level = " . $cLvl .",
    date_process = '$today' where sku = {$data[$n]['sku']}");

コストを追加するだけでテーブルが更新されますが、csmtまたはholdフィールドを変更しても何も更新されません。

MySQL クエリで値をハードコーディングすると、正常に動作します。そのため、PHP コードに何らかの問題があるようです。

これでどこが間違っているのか誰にもわかりますか?

$today = date('Y-m-d');
$data = json_decode($_POST['data'], true); 

foreach ($data as $value) {
    // check to see if it was taken  off hold
    if ($data[$n]['cost']> 0 || $data[$n]['csmt'] !== 0) {

        //update commission information
        //gather data
        $result = $conn->query("SELECT book_code FROM book_type WHERE book_type_id = {$data[$n]['booktype']}");
        if ($result) { $bookType = $result->fetch_assoc(); }

        $result = $conn->query("SELECT book_type_3 FROM feature WHERE feature_id = {$data[$n]['featureid']}");
        if ($result) { $bookType3 = $result->fetch_assoc(); }

        $result = $conn->query("SELECT condition_id FROM defect WHERE defect_id = {$data[$n]['defect']}");
        if ($result) { $cId = $result->fetch_assoc(); }

        $result = $conn->query("select source_id from inventory where sku = {$data[$n]['sku']}");
        if ($result) { $buyer = $result->fetch_assoc(); }

        $result = $conn->query("SELECT class_code, notes, price, usedbuying_price FROM follette_title WHERE isbn13 = {$data[$n]['isbn']}");
        if ($result) {
            $follett = $result->fetch_assoc();
            $follett_price = $follett['usedbuying_price'];
        }

        if ($data[$n]['cost'] == 0 || $bookType3['book_type_3'] == "DMG")
        {
            $cLvl = null;
        }
        elseif ($bookType['book_code'] == "IE" || $bookType['book_code'] == "AIE")
        {
            $cLvl = 3;
        }
        elseif ($cId['condition_id'] == 1 || $cId['condition_id'] == 2 || $cId['condition_id'] == 3 || $cId['condition_id'] == 4 || $follett['class_code'] == "D" || strpos($follett['notes'],"(T)") == true)
        {
            $cLvl = 2;
        }
        elseif ($cId['condition_id'] == 5)
        {
            $cLvl = 1;
        }

        if ($data[$n]['csmt'] == 0) {
            //get buyer commission rate
            if (!empty($cLvl))
            {
                $result = $conn->query("SELECT lvl" . $cLvl . " FROM buyers WHERE buyer_id = {$buyer['source_id']}");
                //echo"SELECT lvl" . $cLvl . " FROM buyers WHERE buyer_id = {$buyer['source_id']}"; die;
                if ($result) { $comRate = $result->fetch_assoc(); } //print_r($comRate); die;
            }

            //calculate final cost
            if (!empty($comRate['lvl'.$cLvl]))
            {
                $cost = ($data[$n]['cost']) + (($data[$n]['cost']) * $comRate['lvl'.$cLvl]);
            }

        }

        $csmt = $data[$n]['csmt'];
        $conn->query("update inventory set cost = $cost, csmt = $csmt, 
            hold = {$data[$n]['hold']}, commission_level = " . $cLvl .",
            date_process = '$today' where sku = {$data[$n]['sku']}");
4

3 に答える 3

1
$conn->query("update inventory set cost = ?, csmt = ?, hold = ?, commission_level = ?, date_process = ? where sku = ?"); 
$conn->bindParam("ssssss", $cost, $csmt, $data[$n]['hold'], $clvl, $today, $data[$n]['sku']); 
$conn->execute();

s(bindParam 内の) を各変数のデータ型に合わせて変更する必要があります。

于 2012-08-03T17:54:34.013 に答える
-1

更新しようとしているデータのタイプ (INT、STRING、VARCHAR など) によっては、データをデータベースに送信する前にフォーマットする必要がある場合があります。

$csmt がユーザーまたはアイテムまたは何かからの TEXT または VARCHAR を参照する場合、データベースに送信する前に適切にフォーマットする必要がある引用符またはその他の文字がテキストに含まれる場合があります。データベースに送信されるコマンドの一部が無効な場合、データベースはデータを受け入れません。

変数が表すデータ型の種類を正確に知っておくと便利ですが、$csmt がある種の TEST であると仮定すると、使用する必要があります。

これにより、文字列値がコーディングされます ->

$value = mysql_real_escape_string( $csmt ); // Formats the string for database storage

$csmt の代わりに $value を使用する必要があります

これにより、文字列値がデコードされます->

$todisplay = htmlspecialchars( $csmt, ENT_QUOTES ); // $csmt from database
// $todisplay = the value to display on your page.
于 2012-08-03T18:04:21.077 に答える