【问题标题】:Error updating record: Unknown column 'Jason' in 'field list'更新记录时出错:“字段列表”中的未知列“Jason”
【发布时间】:2021-08-17 20:08:20
【问题描述】:

如果这已经存在,请原谅我,但我没有看到任何与我的问题足够接近的东西来提供任何类型的解决方案或解决路径。

我的查询: $sql = "UPDATE users SET FirstName=$fname WHERE id=$id";

$fname 确实等于 Jason。但它应该将 sql 字段 FirstName 更改为“Jason”。相反,它试图找到一个名为 Jason 的字段。我曾尝试在“Jason”中进行硬编码,但后来它说有一个意外的字符串。硬编码它实际上会导致问题,因为数据需要是一个变量,以便用户可以将他们的名字更改为他们想要的任何名称。我已经回显了 $id 并且该值正确出现。我的代码在 php 中。

stackoverflow.com 的长期读者,第一次发帖。如果有任何其他可能有用的代码或信息,请告诉我。

编辑:我没有意识到变量也需要在引号内。我假设引号是专门针对硬编码字符串的。将 $fname 放在单引号中作为 '$fname' 解决了它。谢谢大家!!!

【问题讨论】:

  • 字符串应该被引用。像这样的查询应该被参数化
  • 谢谢@HoneyBadger 和斯图。斯图,我一定会把它添加到我的阅读清单中!
  • 注意代码注入

标签: php sql


【解决方案1】:

使用单引号:

$sql = "UPDATE users SET FirstName='$fname' WHERE id=$id";

确保保护您的 SQL 查询;如果$fname 的值是动态的,那么您必须使用mysqli_real_escape_string 转义特殊字符以避免非常危险的漏洞SQL Injection

【讨论】:

  • 非常感谢!我不敢相信它是如此简单!我可以在网上找到的所有教程都显示了硬编码的数据而不是变量,我只是假设单引号是因为硬编码的值是字符串而不是变量。我非常感谢! =)
  • 不要依赖*_real_escape_string()函数来防止SQL注入,they alone are not sufficient。相反,请始终使用 prepared statementsbound parameters。请参阅 this pagethis post 了解一些很好的示例。
  • @AlexHowansky 感谢您提供的信息!我看过一个绑定参数的例子,但它几乎不在我的掌握范围内。所以,我觉得首先获得一个简单的版本,然后将其完善为绑定参数和准备好的语句可能有助于我更好地理解它。我的学校教过我们 javascript 和 python,但没有教过 php。所以,php是我自己学习的一种语言。我期待阅读您为我提供的资源!!!
  • @AlexHowansky,我同意,使用准备好的语句是防止 SQL 注入的最好和最简单的方法。
猜你喜欢
  • 1970-01-01
  • 2010-11-23
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多