2016-05-16 9 views
-1

注文テーブルの一部の行を更新する必要があります。PDO PHP - 行が更新されていない - エラーなし

私のコードは完全に正常に動作しますが、私のphpmyadminをチェックしているときに、どの行も更新されません。私は同じテーブルから別のカラムを更新しようとしましたが、どちらもうまくいきませんでした。

誰でも手伝ってもらえますか?

(私は別のテーブル内の行を更新しようとし、それが正常に動作するように見えた。)

PHP:

<?php 
    require '../app/db.php'; 
    require '../app/init.php'; 
    if (!isset($_SESSION['loggedin']) || !$_SESSION['loggedin']) { 
     header('Location: '.ADMIN_URL); 
     exit; 
    } 
    //Get all orders 
    $sth = $db->prepare("SELECT id, invoice_id, order_id, order_completed_at, total_shipping, shipping_tax, owner_site_name, export_csv FROM orders WHERE id > 1573"); 
    $sth->execute(); 
    $results = $sth->fetchAll(PDO::FETCH_ASSOC); 
    $results = json_decode(json_encode($results), 1); 
    foreach ($results as $order => $value) { 
     $csv = json_decode($value['export_csv'], 1); 
     $total_shipping = number_format($value['total_shipping']+$value['shipping_tax'], 2, ',', '.'); 
     $date = date("d-m-Y", strtotime(explode(' ', $value['order_completed_at'])[0])); 
     $shipping = $date.';-'.$value['invoice_id'].';0;"1050";"";"'.$value['owner_site_name'].' (ID: '.$value['order_id'].')";'.$total_shipping.';"DKK";100,00;"Salg";"";0;'.$date.';0,00;;"";"";0,00;0;"";0;"";"";"";"";"";0;0,00;"";"";"";"";"";0'; 
     $csv['separated']['shipping'] = $shipping."\n"; 
     $joins = explode("\n", $csv['joined']); 
     foreach ($joins as $join => $value) { 
      $explode = explode(';', $value); 
      if (isset($explode[3])) { 
       if ($explode[3] == '"1040"') { 
        $joins[$join] = $shipping; 
       } 
      } 
     } 
     $csv['joined'] = implode("\n", $joins); 
     $csv = json_encode($csv); 
     //Update export_csv 
     $sth = $db->prepare("UPDATE `orders` SET `export_csv` = :csv WHERE `id` = :id"); 
     $sth->bindParam(':csv', $csv); 
     $sth->bindParam(':id', $value['id']); 
     $res = $sth->execute(); 
     if (!$res) { 
      echo 'Failed for order #'.$value['id'].'<br>'; 
     } 
    } 
    ?> 

表構造:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
    SET time_zone = "+00:00"; 

    -- 
    -- Database: `xxxx` 
    -- 

    -- -------------------------------------------------------- 

    -- 
    -- Struktur-dump for tabellen `orders` 
    -- 

    CREATE TABLE `orders` (
    `id` int(11) NOT NULL, 
    `invoice_id` int(11) NOT NULL, 
    `owner_site_id` int(11) NOT NULL, 
    `owner_site_url` text NOT NULL, 
    `owner_site_name` text NOT NULL, 
    `order_id` int(11) NOT NULL, 
    `order_created_at` datetime NOT NULL, 
    `order_updated_at` datetime NOT NULL, 
    `order_completed_at` datetime NOT NULL, 
    `status` varchar(255) NOT NULL, 
    `currency` varchar(255) NOT NULL, 
    `total` double NOT NULL, 
    `subtotal` double NOT NULL, 
    `total_tax` double NOT NULL, 
    `total_shipping` double NOT NULL, 
    `shipping_tax` double NOT NULL, 
    `cart_tax` double NOT NULL, 
    `total_discount` double NOT NULL, 
    `shipping_methods` text NOT NULL, 
    `payment_details` text NOT NULL, 
    `billing_address` text NOT NULL, 
    `shipping_address` text NOT NULL, 
    `total_line_items_quantity` int(11) NOT NULL, 
    `note` text NOT NULL, 
    `customer_ip` varchar(255) NOT NULL, 
    `customer_id` int(11) NOT NULL, 
    `view_order_url` text NOT NULL, 
    `line_items` mediumtext NOT NULL, 
    `shipping_lines` text NOT NULL, 
    `tax_lines` text NOT NULL, 
    `fee_lines` text NOT NULL, 
    `coupon_lines` text NOT NULL, 
    `export_csv` text NOT NULL, 
    `proforma_text` text NOT NULL, 
    `updated_at` datetime NOT NULL, 
    `created_at` datetime NOT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

    -- 
    -- Begrænsninger for dumpede tabeller 
    -- 

    -- 
    -- Indeks for tabel `orders` 
    -- 
    ALTER TABLE `orders` 
    ADD PRIMARY KEY (`id`), 
    ADD UNIQUE KEY `unique_order_id` (`order_id`,`owner_site_id`); 

    -- 
    -- Brug ikke AUTO_INCREMENT for slettede tabeller 
    -- 

    -- 
    -- Tilføj AUTO_INCREMENT i tabel `orders` 
    -- 
    ALTER TABLE `orders` 
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 

(たぶんある種行を更新できないようにするための私のユニークなキーが私の疑いを持っているので、 "force-update"を実行してください。

+2

間違いはありますか?エラーログには何もありませんか? –

+1

エラーチェックは表示されません。 'PDO :: ERRMODE_EXCEPTION'は有効になっていますか? – mario

+0

いいえ - 何もありません。 $ sth-> rowCount()を実行しようとしましたが、0が返され、行は影響を受けません。 – RasmusBS

答えて

0

ソリューション:

さらにデバッグした後、私は$value['id']がNULLであることがわかりました。

理由を説明できませんが、代わりに$results[$order]['id']を使用して行のIDを取得しました。

関連する問題