PHP MySQL Database


PHP MySQL Database

我最近开始学习php,在一些例子的帮助下,我设法编写了这段代码(主要来自W3Schools(:

<?php
$con=mysqli_connect("Data Removed for Privacy");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
$sql= "INSERT INTO EventRecord (PlayerName, EventType, Value, Time)
VALUES
('$_Get[PlayerName]', '$_Get[Event]' ,'$_Get[Value]' ,'$_Get[Time]')";
if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "1 record added";
mysqli_close($con);
?>

但是,当做类似的事情时

http://example.com/MyData.php?PlayerName=Test2&EventType=Test&Value=Test&Time=500

它出现在我的数据库中,因为所有值都是空的。

其他信息:该表有 5 列,上面提到的四列和 EventId(主索引,自动递增(。对不起,如果这是一个愚蠢的问题,或者我做错了什么。

$_GET是一个超全局数组,它应该是方块字母,而不是像$_get

一些免责声明>>

  • 切勿访问www.w3schools.com浏览资源。您可以在here中找到原因。
  • 切勿将$_GET, $_POST等外部参数直接传递到查询中,因为这会导致 SQL 注入。切换到Prepared Statements以便自动处理转义。

$_Get[PlayerName]这样的表达式应该$_GET['PlayerName'] 。原因如下:

  1. 您尝试使用的变量是保留变量 $_GET 。但是变量名称区分大小写,这意味着变量$_Get$_GET不同。所以当你尝试使用$_Get时,PHP抱怨一个"未定义的变量"。

  2. $_GET是一个关联数组,它将整数或字符串映射到值。在您的情况下,它将字符串'PlayerName'映射到一个值,因此您希望将字符串'PlayerName'传递给数组索引运算符。但是,不带引号的字符串PlayerName被解释为常量。这个常量是未定义的,所以PHP抱怨一个"未定义的常量"。

这不是

$_Get[PlayerName]

$_GET['PlayerName']

否则,您将无法获得这些值。请注意名称周围的大写 GET 和单引号!

除此之外,(编辑,不是W3C,而是:(W3Schools不是开始学习的好地方,还有其他更好的资源可用。切勿在查询中直接使用 $_GET 或 $_POST 变量!!

尝试:

$PlayerName=$_GET["PlayerName"];
$Event=$_GET["Event"];
$Value=$_GET["Value"];
$Time=$_GET["Time"];
$sql= "INSERT INTO EventRecord (PlayerName, EventType, Value, Time)
VALUES
('$PlayerName', '$Event' ,'$Value' ,'$Time')";