【发布时间】:2015-04-21 20:12:26
【问题描述】:
这是从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\nmyhost\r\n内容类型: 应用程序/x-www-form-urlencoded\r\n连接:关闭\r\n\r\n\r\n
其中 ID1,ID4 是整数; ID2、ID3 字符; 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) '".$ID3.", 到 '".$ID3."',
更新:2015.04.22 13:56
好的,我试过了,它可以在我的主页上运行: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");
?>
【问题讨论】:
-
请注意,
mysql_功能现在不再只是不鼓励(就像过去几年一样),而是正式的 deprecated。你真的应该使用MySQLi 或PDO,因为这段代码很快就会停止工作。 -
请勿使用 msql_query() 并从网页附加值,这称为 SQL 注入,这就是您的站点/数据库/服务器被黑客入侵的方式。您必须改用 PDO 来使用参数化查询。
-
@NhanLe 请参阅Why shouldn't I use mysql_* functions in PHP? 了解更多信息。
-
@NhanLe 另一件事是您正在访问 POST 变量,但您通过 GET
GET /add.php?ID1=1int&ID2=2char&ID3=3char&ID4=4int&ID5=2015-04-13 01:00:00发送数据您可以将 $_POST['var'] 更改为 $_GET['var']。 -
嗨,@NhanLe 邮政!因此,您需要更改测试 add.php 的方式