2016-09-09 9 views
0

これは非常にばかげた質問です。しかし、私はこのクエリの動作には失望しています。私はOpencartで顧客を更新しています。 Updateクエリを作成して実行すると、ほとんどのフィールドは挿入されず、いくつかのフィールドは挿入されません。特に「ステータス」と「承認済み」の列を更新する必要があります。下記のクエリをご確認ください。PHPスクリプトではないphpmyadmin utでクエリが機能する

UPDATE oc_customer SET customer_group_id=1,store_id=0,firstname='',lastname='HEATHER HUME',telephone='',fax='0',password='f53cbb1352950831a84035d320063383f345cfce',salt='rCF2EquoV',status='1',approved='1',date_added='2016-08-31',discount=62.00 WHERE customer_id='1418' 

私にこれが間違っていることを教えてください。それは電話列を更新しており、ステータスではなく、承認されています。以下は

私のPHPコード

CREATE TABLE IF NOT EXISTS `oc_customer` (
    `customer_id` int(11) NOT NULL, 
    `customer_group_id` int(11) NOT NULL, 
    `store_id` int(11) NOT NULL DEFAULT '0', 
    `firstname` varchar(32) NOT NULL, 
    `lastname` varchar(32) NOT NULL, 
    `email` varchar(96) NOT NULL, 
    `telephone` varchar(32) NOT NULL, 
    `cellphone` varchar(32) NOT NULL, 
    `fax` varchar(32) NOT NULL, 
    `password` varchar(40) NOT NULL, 
    `salt` varchar(9) NOT NULL, 
    `cart` text, 
    `wishlist` text, 
    `newsletter` tinyint(1) NOT NULL DEFAULT '0', 
    `address_id` int(11) NOT NULL DEFAULT '0', 
    `custom_field` text NOT NULL, 
    `ip` varchar(40) NOT NULL, 
    `status` tinyint(1) NOT NULL, 
    `approved` tinyint(1) NOT NULL, 
    `safe` tinyint(1) NOT NULL, 
    `token` text NOT NULL, 
    `date_added` datetime NOT NULL, 
    `discount` decimal(8,2) NOT NULL DEFAULT '0.00', 
    `tax_id` varchar(50) NOT NULL, 
    `subscribe` varchar(5) NOT NULL 
) ENGINE=MyISAM AUTO_INCREMENT=1419 DEFAULT CHARSET=utf8; 

私のテーブルの構造である

$query = "UPDATE oc_customer SET customer_group_id=1,store_id=0,firstname='$first_name',lastname='$last_name',telephone='$phone',fax='$fax',password='$password',salt='$salt',status=".(int)$status.",approved=".(int)$approved.",date_added='$date_added1',discount=$discount WHERE customer_id='$customer_id' "; 
mysqli_query($con,$query); 

$詐欺はそれで私の接続variable.Noの問題です。

+1

「少数のフィールドが挿入され、少数しかありません」、更新されているフィールドと更新されていないフィールドがありますか?同じ行にあるか、別の行について話していますか?あなたもあなたのPHPコードを投稿する必要があります。 – jeroen

+0

@jeroen、それは同じ行です。電話が更新され、ステータスおよび承認が更新されません。 – Phani

+0

@Anant、私も引用符なしで試してみました。私は私のPHPコードで質問を更新しています。 – Phani

答えて

0

ご回答ありがとうございます。クエリに問題はありません。この問題は、エディタやPhpMyAdminで見ることのできない特殊文字の問題です。これは、同じ問題を抱えている人、つまりPHPスクリプトではなくPhpMyAdminでクエリが実行される人にとって役に立ちます。コピーペーストが再び再びデバッグにクエリがタフになり、クエリには見えない特殊文字をコピーする可能性があるため

Please type the query on your own. Please don't copy and paste it from anywhere. Not atleast from your own page again. 

ご自身のすべてを入力してください。

0

文字列連結で変数をキャストしようとすると、PHPが常にうまく動作するとは限りません。また、customer_idの文字列として整数を扱っています。サイドノートとして

$query = "UPDATE oc_customer SET customer_group_id=1,store_id=0,firstname='$first_name',lastname='$last_name',telephone='$phone',fax='$fax',password='$password',salt='$salt',status=".((int)$status).",approved=".((int)$approved).",date_added='$date_added1',discount=$discount WHERE customer_id=$customer_id "; 

、それはそのようなSQLクエリに変数を注入するために非常に悪いセキュリティの実践です:

が、これは試してみてください。 SQLインジェクション攻撃を避けるには、パラメータを使用する必要があります。

0

私はあなたのコードを実行して何も間違いがないことを確認しました。私の行はステータスが正常に更新され、両方のフィールドが承認されました。

しかし、整数に型キャストするときに、同時に文字列に連結するので、最終的に文字列のみになるため、型キャストする必要がないため、変数を整数に型キャストしないことをお勧めしますPHPを介してこれらの変数に有効な値を渡してください。次のステートメントを試して、問題が解決すれば元に戻してください。

$query = "UPDATE oc_customer SET customer_group_id=1,store_id=0,firstname='$first_name',lastname='$last_name',telephone='$phone',fax='$fax',password='$password',salt='$salt',status=$status,approved=$approved,date_added='$date_added1',discount=$discount WHERE customer_id='$customer_id'"; 
関連する問題