我最近开始学习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']
。原因如下:
-
您尝试使用的变量是保留变量
$_GET
。但是变量名称区分大小写,这意味着变量$_Get
和$_GET
不同。所以当你尝试使用$_Get
时,PHP抱怨一个"未定义的变量"。 -
$_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')";