Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “未知列”&引用;字段内列表-更新查询_Php_Mysql - Fatal编程技术网

Php “未知列”&引用;字段内列表-更新查询

Php “未知列”&引用;字段内列表-更新查询,php,mysql,Php,Mysql,这个查询以前工作过,现在当它再次运行时,我们在字段列表错误中得到未知列 如果我们不使用变量和设置原始数据,那么查询工作得很好。这些列与数据库中的列相匹配 $update_order_id = "UPDATE order_tbl SET o_process=$process, o_payment=$payment, o_paymentType=$paymenttype WHERE o_id=$orderid AND o_active='1'"; 您需要将查询中的值包装为单引号 o_process

这个查询以前工作过,现在当它再次运行时,我们在字段列表错误中得到未知列

如果我们不使用变量和设置原始数据,那么查询工作得很好。这些列与数据库中的列相匹配

$update_order_id = "UPDATE order_tbl SET o_process=$process, o_payment=$payment, o_paymentType=$paymenttype WHERE o_id=$orderid AND o_active='1'";

您需要将查询中的值包装为单引号

o_process='$process'

因此,查询将如下所示。对于字符串值,它是必需的

$update_order_id = "UPDATE order_tbl 
SET o_process='$process',
o_payment='$payment', 
o_paymentType='$paymenttype'
WHERE o_id= '$orderid' AND o_active='1'";

您可能需要将变量用引号括起来,只有整数列不需要引号

$update_order_id = "UPDATE order_tbl SET o_process='$process', o_payment='$payment', o_paymentType='$paymenttype' WHERE o_id='$orderid' AND o_active='1'";

这看起来很可疑,您正在使用不安全的插入方法。请阅读并开始学习如何在支持预处理语句的API(PDO或MySQLi)中使用预处理语句,从而完全避免这些问题。为了理解SQL查询是如何不正确构建的,请阅读@MichaelBerkowski,为简单起见,我在问题中省略了这些语句,因为我认为这是一个给定的问题。已经采取了必要的步骤来防止sql注入。我们发现出现问题的原因是我们必须使用mysqli_受影响的行,而不是num_行。这似乎奏效了。但感谢您指出,为了防止SQL注入,需要对语句进行转义。(无意讽刺)。在过来之前,我们已经尝试了很多方法,但现在已经成功了,感谢所有帮助我们的人:)我们将始终指出这一点,因为似乎绝大多数PHP问题都有明确而直接的漏洞(比如
$\u GET
直接在SQL中)。许多询问者从未听说过SQL注入,也不知道
mysql_*()
扩展的不受欢迎。关于SQL字符串中变量的预处理语句的建议仍然有效-它避免了变量的引号问题,而不管这些变量是字符串类型还是int类型。是的,更正了这一点,为int添加引号也没有害处。