查询在 phpmyadmin 中有效,但在 PHP 脚本中无效

Query works in phpmyadmin ut not in PHP Script

我知道这是个很愚蠢的问题。但我对此查询的行为感到失望。我正在更新 Opencart 中的客户。当我编写并执行更新查询时,很少有字段被插入,也很少没有。特别是我需要更新 'status' 和 'approved' 列。请检查以下查询。

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

请告诉我这有什么问题。它正在更新电话列而不是状态,已批准。

下面是我的table

的结构
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;

我的 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=".(int)$status.",approved=".(int)$approved.",date_added='$date_added1',discount=$discount WHERE customer_id='$customer_id' ";
mysqli_query($con,$query);

$con 是我的连接 variable.No 问题。

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 注入攻击。

我 运行 你的代码没有发现任何错误,我的行已成功更新状态并批准了两个字段。

但我建议您不要将变量类型转换为整数,因为当您同时将它们类型转换为整数时,您将它们连接到一个字符串,最终只产生一个字符串,所以不需要类型转换只 make确保您通过 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'";

感谢您的回复。查询没有问题。问题在于我们在编辑器或 PhpMyAdmin 中看不到的特殊字符。这可能对遇到同样问题的人有帮助,即查询在 PhpMyAdmin 中执行,而不是在 PHP 脚本中执行。

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

请自行输入所有内容,因为复制粘贴可能会再次将不可见的特殊字符复制到查询中,这再次使您的查询难以调试。