【问题标题】:Inputting variables from GET into a SQL Database not working将 GET 中的变量输入 SQL 数据库不起作用
【发布时间】:2013-12-29 20:03:48
【问题描述】:

我正在尝试将变量从 $_GET 插入 MySQL 数据库。我是菜鸟,我无法弄清楚它有什么问题!代码运行并输出添加到表中的用户和用户 ID,但是当我签入 phpMyAdmin

$username = "username";
$password = "password";
$host = "host";
$database = "database";
$input_username = $_GET["username"];
$input_userId = $_GET["userId"];
mysql_connect($host,$username,$password);
mysql_select_db($database) or die("Couldn't select database: " . $database);
$sql = "INSERT INTO  users( UserId ,  Username )        VALUES('$_GET['userId']','$_GET['username']');";
echo "Username: " . $input_username . ", UserId: " . $input_userId ." added to table.";
mysql_close();

编辑:我更改了代码以适应回复的答案,但现在我收到此错误:

解析错误:语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,在第 10 行的 PAGEPATH 中需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING

【问题讨论】:

  • 好在它不起作用。你很容易受到SQL injection attacks 的攻击。你也有绝对 NO 错误处理,并且盲目地假设一切都会完美运行并且永远不会失败。
  • @fred:如果可以的话,我愿意。您刚刚介绍了语法错误,
  • 我做到了? @MarcB Lordie Lordie。好吧。从头开始(OP)我讨厌mysql_*lol
  • To: (OP) 请阅读此 => stackoverflow.com/questions/60174/… 根据 Marc 对 SQL 注入的评论。
  • @fred。您不能在双引号字符串中引用数组键,除非您使用{} 表示法。 "$arr['bad'] {$arr['good']} $arr[good]".

标签: php mysql sql get


【解决方案1】:

您没有执行查询! 添加:

    $db = mysql_connect($host,$username,$password);
    mysql_select_db($database) or die("Couldn't select database: " . $database);

 $userId = mysql_real_escape_string($_GET["userid"]);
 $userName = mysql_real_escape_string($_GET["username"]);

$sql = "INSERT INTO  users(  UserId ,  Username ) 
VALUES ('". $userId  ."','". $userName  ."');";

        mysql_query($sql, $db);

【讨论】:

  • “漏洞”与原始问题无关。 SQL 注入的问题在这个小脚本中不是问题。谁在乎?
  • 你说得对,JakeGould 这就是为什么我只回答基本问题:)
  • downvote 会很严厉,但@PeteR 是对的。如果 OP 现在没有意识到,他永远不会。
  • “如果 OP 现在没有意识到,他永远也不会。”确切地!让原贴学习。如果他们甚至无法运行查询,他们将永远无法理解更大的概念。
  • @JakeGould:是的,你说的很对。为什么我,或者其他人,真的要废话?这不是我的网站,否决票已撤回。
【解决方案2】:

好吧,如果你想使用如此易受攻击的代码,你的 sql 必须是这样的:

$sql = "INSERT INTO  users(  UserId ,  Username ) 
VALUES ('".$_GET["userid"]."','".$_GET["username"]."');";
mysql_query($sql, $db);

【讨论】:

  • 执行查询
【解决方案3】:

试试这个我已经删除;并添加mysql_query($sql);

<?php
$username = "sd";
$password = "asd";
$host = "sad";
$database = "asd";


$input_username = $_GET["username"];
$input_userId = $_GET["userId"];

mysql_connect($host,$username,$password);

mysql_select_db($database) or die("Couldn't select database: " . $database);

$sql = "INSERT INTO  users(  UserId ,  Username ) 
VALUES ('$_GET[userid]','$_GET[username]')";
mysql_query($sql);

echo "Username: " . $input_username . ", UserId: " . $input_userId ." added to table.";
mysql_close();
?>

【讨论】:

  • erm...你真的只是把你的用户名和密码放在那里吗?
  • 否 - 答案没有编辑。他们从原始帖子中就在那里。
  • 我刚刚复制粘贴并添加了更改
  • 删除了它们和数据库。我不敢相信我一开始就忘了删除它们。
  • 是的,有些时候我们忘记了正常的事情
猜你喜欢
  • 1970-01-01
  • 2016-07-02
  • 2021-08-24
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多