【问题标题】:Apparent error in PHP syntax?PHP语法中的明显错误?
【发布时间】:2023-03-18 02:01:01
【问题描述】:

我收到以下错误: 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“.98.229)”附近使用正确的语法

在我的PHP代码上,如下:

<?php
$con = mysql_connect("****", "****", "****");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("****", $con);
$ip=$_SERVER['REMOTE_ADDR'];

$sql="INSERT INTO users (fname, lname, email, password, ip)
VALUES
('$_POST[fname]', '$_POST[lname]', '$_POST[email]', '$_POST[password]', $ip)";

if (!mysql_query($sql,$con))
  {
die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);
?>

有什么建议吗? :)

【问题讨论】:

标签: php sql syntax


【解决方案1】:

$ip 可能应该是 '$ip' 以使其成为一个字符串。

我敢肯定,我不会是最后一个对您说您应该将 mysqliPDO 与参数化输入一起使用的人。允许用户输入成为查询字符串的一部分是一个巨大的安全禁忌。

【讨论】:

  • 谢谢@SamDufel。已更正。
  • 成功了!非常感谢,第一次在这个网站上发帖,我一直在使用雅虎的答案,这非常有用!
  • 谢谢,成功了!知道如何获得 ID 列的自动增量吗?
  • @CharlesJenkins 查看 MySQL 文档中的 Using AUTO_INCREMENT
【解决方案2】:

您应该真正使用 PDO 并在执行操作之前检查您的 POST。您完全容易受到 SQL 注入的攻击。

Are PDO prepared statements sufficient to prevent SQL injection?

【讨论】:

  • 这是对 OP 问题的回答吗?
  • 这是一个非常重要的建议...我已经 +1 应该开箱即用的答案(来自削减武器)。但是我没有足够的分数来直接评论这个问题,所以我只能“回答”它。
  • 刚刚注意到你的观点。我撤回评论,并投反对票:)
【解决方案3】:

架构中的 IP 列是什么类型的字段?我想它需要像您声明中的其他字符串一样被引用。

你熟悉SQL InjectionPDO吗?

您可能还想对如何在数据库中最好地存储 IP 地址进行一些研究。

【讨论】:

  • 谢谢,成功了!知道如何获得 ID 列的自动增量吗?
猜你喜欢
  • 2012-07-15
  • 1970-01-01
  • 2014-08-05
  • 2013-08-23
  • 2016-12-16
  • 1970-01-01
  • 2011-02-06
  • 2019-09-27
相关资源
最近更新 更多