【问题标题】:it goes through but nothing is added on phpmyadmin它通过了,但 phpmyadmin 上没有添加任何内容
【发布时间】:2017-08-29 12:43:13
【问题描述】:

我有这个 PHP 代码,它从 HTML 文件中获取数据,当我点击提交时,它没有问题,但没有任何内容添加到数据库中!我以前从来没有遇到过这个问题。请帮忙

     <?php
$SNHUID=$_POST['SNHUID'];
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$department=$_POST['department'];


@mysql_connect("localhost","root","");
mysql_select_db("db");
$select ="insert into t_users (SNHUID,FirstName,LastName,Department) values ('.$SNHUID.','".$fname."','".$lname."','".$department."')";

$sql=mysql_query($select);

print'<script type="text/javascript">';
print'alert("The data is inserted")';
print'</script>';
mysql_close();
?>

【问题讨论】:

  • mysql_connect 已弃用。 @ 符号应该做什么?
  • @i-- 这是一种隐藏错误的肮脏方式
  • mysql_* 函数自 PHP 5.5.0 起弃用,并从 PHP 7.0.0 起删除。将您的代码切换为使用PDOmysqli。请务必使用准备好的语句和参数绑定来防止 SQL 注入和引用问题。
  • 另外,您的连接不正确。将简单变量放在双引号字符串中时不需要句点,除非您要打破双引号字符串。你不是。 '.$SNHUID.'。但是使用准备好的语句可以解决这个问题。
  • Mysql 错误往往是静默错误。无论您使用哪个 API 进行 mysql 查询,当出现问题时,请始终检查错误。

标签: javascript php mysql post


【解决方案1】:

首先,您在查询中的 $SNHUID 变量周围有双引号/单引号错误。它可能会导致错误,因为 MySQL 不理解查询中的文字 $SNHUID 字符串。 您始终可以在查询后使用mysql_error() 检查查询中的错误。

附带说明,您不应直接将参数从用户传递给查询,因为这可能会导致 SQL 注入漏洞。请改用prepared statement

【讨论】:

  • 可能值得注意的是,准备好的语句不能与 mysql_ 库一起使用,这是弃用它的一个很好的理由。 OP 应该考虑尽快切换到mysqliPDO 以允许他们使用此功能,这既可以保护数据免受注入攻击,也可以大大减少与字符串连接相关的语法错误的可能性。
【解决方案2】:

请替换此行。

我在 $SNHUID 前后添加了双引号

$select ="insert into t_users (SNHUID,FirstName,LastName,Department) 
           values ('".$SNHUID."','".$fname."','".$lname."','".$department."')";

【讨论】:

  • 为什么 OP 应该“替换这一行”? 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅适用于 OP,而且适用于 SO 的未来访问者。
  • @bub 我在 $SNHUID 前后添加了双引号
  • 这并不能解决巨大的 SQL 注入漏洞,这将是编写查询的正确方法。
  • @Adyson 是的,你是对的。但我认为问题不在于 SQL 注入。用户只是询问数据没有存储在数据库中,所以我建议这样做。
  • SQL 注入总是 是一个问题(与任何安全相关的问题一样)。通过使用参数化查询,您可以在这里用一块石头杀死两只鸟。它将删除任何语法错误并保护数据库,并且 OP 将学习如何安全地编写 SQL 查询的好课。
猜你喜欢
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 2021-10-17
相关资源
最近更新 更多