【问题标题】:MySQL / PHP - Cannot update database entriesMySQL / PHP - 无法更新数据库条目
【发布时间】:2014-11-10 16:57:54
【问题描述】:

目前我正在尝试为自己制作一个迷你博客/cms 类型的东西来测试我的技能,并希望通过 PHP 学习一两件事。

所以我有一个表单,里面有一个文本字段。提交后,它应该运行以下查询,但是我收到以下错误...

资源 ID #4 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'cms, description = hello world, maintenance = off, regsi' 附近使用正确的语法

这是该区域周围的代码...

mysql_query("UPDATE settings SET name = " . $siteName . ", description = " . $siteDesc . ", maintenance = " . $siteMode . " [...] ") or die($settings . "<br/>" . mysql_error());

我使用“[...]”将其缩短,因为它遵循相同的样式(即“test1 = $test1, test2 = $test2”等...)。

有什么帮助吗?谢谢!

【问题讨论】:

  • '" . $siteName . "' 并为其他人做同样的事情。
  • 我同意@Fred-ii-。您可以从错误消息中看到它尝试执行description = hello world。字符串值必须用引号括起来,例如 description = 'hello world'
  • 您应该提出一个新问题,而不是编辑您现有的问题
  • @andrew 我同意。我做了一个回滚。
  • 这可能是因为您是新用户并且需要获得代表,我给了您 +5 分这个问题来帮助您前进,但不幸的是您需要遵守协议,每个主题一个主题邮政。同时看看这里stackoverflow.com/questions/12020227/…

标签: php mysql


【解决方案1】:

您实际上不需要使用.(连接)运算符关闭和重新打开字符串

php 字符串解析器会将变量插入到字符串中。

所以你可以这样做:

mysqli_query("UPDATE settings SET name = '$siteName', description = ...";

单引号告诉 mysql 将变量视为字符串文字而不是列名。

您还应该做的(如果还没有的话)是转义您的用户输入变量,请参阅How can I prevent SQL injection in PHP?

你不应该做的是使用mysql*_ 函数,因为它们已被折旧。看到大红框here 改用mysqli*_

【讨论】:

  • 感谢 andrew 和 Fred -ii-。是的,现在有效。我现在把安全放在替补席上,因为我还在学习如何做事,但是如果我用 mysqli 替换 mysql,那会更好/更安全吗?无论如何,这仅适用于我的个人项目,因此没有任何内容进入现场环境。
  • @Dan 与其说是安全问题,不如说是功能之一,请参阅stackoverflow.com/questions/548986/mysql-vs-mysqli-in-php,还请记住,当人们尝试升级到未来版本的 php 时,许多网站都会崩溃: )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2017-12-04
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 2021-08-30
  • 2018-05-14
相关资源
最近更新 更多