这是从dba.stackexchange转发的。
很抱歉这样的业余问题,但我不知道为什么这不起作用。 我有一个" add.php"连接到MySQL服务器。
/add.php
<?php
include("connect.php");
$link=Connection();
$ID1=$_POST["ID1"];
$ID2=$_POST["ID2"];
$ID3=$_POST["ID3"];
$ID4=$_POST["ID4"];
$ID5=$_POST["ID5"];
$query = "INSERT INTO Battery (ID01, ID02, ID03, ID04, ID05)
VALUES ('".$ID1."','".$ID2.",'".$ID3.",'".$ID4."','".$ID5."')";
mysql_query($query,$link);
mysql_close($link);
header("Location: index.php");
?>
connect.php
<?php
function Connection(){
$server="mysql.randomserver.com";
$user="random";
$pass="1234";
$db="random_1234";
$connection = mysql_connect($server, $user, $pass);
if (!$connection) {
die('MySQL ERROR: ' . mysql_error());
}
mysql_select_db($db) or die( 'MySQL ERROR: '. mysql_error() );
return $connection;
}
?>
我使用简单的HTTP 1.1协议:
GET /add.php?ID1=1int&ID2=2char&ID3=3char&ID4=4int&ID5=2015-04-13 01:00:00 HTTP / 1.1 \ r \ n \ nhosthost \ r \ n内容类型: 应用程序/ x-WWW窗体-urlencoded \ r \ nConnection:关闭\ r \ n \ r \ n \ r \ n
其中 ID1,ID4为int; ID2,ID3 char; ID5日期(SQL)
主人告诉我这个错误:
+IPD,168:<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>hosting</center>
</body>
</html>
如果有人有任何想法让我尝试,我将不胜感激!我真的很无能......
修正: (moskito-x)&#39;&#34;。$ ID3。&#34;,到&#39;&#34;。$ ID3。&#34;& #39;,
好的,我尝试了这个,它可以在我的主页面上运行:Index.php(只需将整个/add.php代码复制到/index.php中)
$query= "INSERT INTO Battery (ID01,ID02,ID03,ID04,ID05)
VALUES ('1int','2char','3char','4int','2015-04-22 17:20:28')";
$result = mysqli_query($link, $query)
但如果我将其替换为add.php,则不会插入任何行。
我改变了add.php,正如其他人所建议的那样:
add.php
<?php
$link=Connection();
$server="mysql.myhost.com";
$user="randomUser";
$pass="randomPwd";
$db="radomdb";
$link=mysqli_connect($server, $user, $pass, $db);
$query = "INSERT INTO Battery (ID01,ID02,ID03,ID04,ID05)
VALUES ('1int','2char','3char','4int','2015-04-22 17:20:28')";
mysqli_query($link, $query)
mysqli_close($link);
header("Location: index.php");
?>
答案 0 :(得分:1)
重要部分$link=Connection();
Connection();
http GET
所以$ID1=$_POST["ID1"];
错误。'".$ID1."','".$ID2.",'".$ID3.",'".$ID4."','".$ID5."')";
// | |
// |_________|____ here forget '
$query = "INSERT INTO Battery (ID01, ID02, ID03, ID04, ID05)
VALUES ('".$ID1."','".$ID2."','".$ID3."','".$ID4."','".$ID5."')";
编辑
现在我们可以在您编辑的问题中看到
其中ID1,ID4为int; ID2,ID3 char; ID5 TimeStamp
查询应该是(假设TimeStamp =&#34; 20150421225300&#34;)字符串格式。
$query = "INSERT INTO Battery (ID01, ID02, ID03, ID04, ID05)
VALUES (".$ID1.",'".$ID2."','".$ID3."',".$ID4.",'".$ID5."')";
答案 1 :(得分:1)
您在帖子中显示的http请求(_
代表空行):
GET /add.php?ID1=1int&ID2=2char&ID3=3char&ID4=4int&ID5=2015-04-13 01:00:00 HTTP/1.1
myhost
Content-Type: application/x-www-form-urlencoded
Connection:close
_
_
_
确实是bad request
,因为(a)你在URI中有未转义的空白字符,(b)当你可能意味着myhost
时,第二行只读Host: myhost
(c) )你有额外的\r\n
(不太可能导致麻烦),所以这样的事情:
POST /add.php?ID1=1int&ID2=2char&ID3=3char&ID4=4int&ID5=2015-04-13+01:00:00 HTTP/1.1
Host: myhost
Content-Type: application/x-www-form-urlencoded
Connection:close
_
_
当然,其他人对SQL注入的说法也适用。