查询在 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.
请自行输入所有内容,因为复制粘贴可能会再次将不可见的特殊字符复制到查询中,这再次使您的查询难以调试。
我知道这是个很愚蠢的问题。但我对此查询的行为感到失望。我正在更新 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.
请自行输入所有内容,因为复制粘贴可能会再次将不可见的特殊字符复制到查询中,这再次使您的查询难以调试。