【问题标题】:MySQL - I have two query but one doesn't work, and one does. Help me please?MySQL - 我有两个查询,但一个不工作,一个不工作。请帮帮我?
【发布时间】:2012-01-14 13:03:53
【问题描述】:
if ($_GET['action'] == "like")
{
mysql_query("UPDATE blog SET like=like+1 WHERE id=".$_GET['id']."");
header('Location: blog.php?id='.$_GET['id'].'');
}
else if ($_GET['action'] == "dislike")
{
mysql_query("UPDATE blog SET dislike = dislike+1 WHERE id = ".$_GET['id']."");
header('Location: blog.php?id='.$_GET['id'].'');
}

“不喜欢”动作效果很好!但是“喜欢”的人没有。是不是很像?

谁能帮帮我???

【问题讨论】:

  • 这个 ."" 是什么意思?
  • 使用 mysql_error() 添加基本错误检查
  • 欢迎来到 Stack Overflow!您没有在查询中进行任何错误检查,因此难怪您无法看到查询失败时会发生什么。 manual on mysql_query() 或此 reference question. 中概述了如何正确显示错误
  • 另外,您显示的代码容易受到SQL injection 的攻击。使用正确的库清理方法(如经典 mysql 库的mysql_real_escape_string()),或切换到 PDO 和准备好的语句。
  • 我希望您确实意识到接受用户输入而不转义 MySQL 会带来严重的安全风险...但是关于主题:如果您将查询粘贴到(例如)phpmyadmin(或像@Dagon 建议的那样回显mysql_error())?

标签: php mysql


【解决方案1】:

LIKE 是一个关键字。使用反引号:

UPDATE blog SET `like`=`like`+1 ...

一般来说,最好不要在关键字之后命名列(LIKE,CASE,SELECT,WHERE 等)。

例子

mysql_query("UPDATE blog SET `like`=`like`+1 WHERE id='".
       mysql_real_escape_string($_GET['id'])."'");

或者,如果您的 id 是整数,则在这种特殊情况下,您只需 .... WHERE id=".(int)$_GET['id']

【讨论】:

  • 一定要注意反引号,就像这里建议的那样。了解 mysql 的基本保留条款并没有什么坏处。
  • 谢谢a1ex07!!!我会尽力!但是我自己可以使用“mysql_real_escape_string()”??这是我的第一个 PHP 和 MySQL 网站..
  • @Frederick Marcoux:添加了 mysql_real_escape_string 的示例
  • @a1ex07 它不起作用... -__-' 但是你能帮我解决一下“mysql_real_escape_string()”吗?
  • 谢谢你的例子,我加了。
【解决方案2】:

一个好的计划是检查 mysql_error() 的返回值以从 MySQL 获取实际错误(您可以通过简单地回显 mysql_error() 来检查这一点)。

除了你真的想在调用 header() 之后抛出一个 exit() 来实际终止脚本的执行,你还想添加 mysql_real_escape_string 来转义你的 GET 参数传递给 MySQL。您不想使用未经转义或未经过滤的用户提供的数据。

【讨论】:

  • 所有正确和好的观点,但mysql_real_escape_string 在这种特定情况下无法防止漏洞。仔细看
  • 它来自一个链接,用户看不到 URL,我在两个页面之间重定向...
  • @Frederick 您仍然需要转义 SQL。对于任何具有一点技术知识的人来说,查看 URL 都是微不足道的
猜你喜欢
  • 2013-01-10
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多