这是我的set.php
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("rdbms.strato.de", "user", "password", "DBXXXXYYYY");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$result = $mysqli->prepare("INSERT INTO `defuse_scores` (ip, name, seconds, difficulty, actions) VALUES (?,?,?,?,?)");
$result->bind_param('ssisi', $_SERVER['REMOTE_ADDR'], $_POST['name'], $_POST['seconds'], $_POST['difficulty'], $_POST['actions']);
if (!$result->execute()) {
printf("Error: %s\n", $mysqli->error);
};
$mysqli->close();
在浏览器中调用页面会返回空白页面和响应状态200 OK
(即使所有$_POST
内容都为空)。
使用POST和本机构从Postman调用页面
{
"ip": "127.0.0.119",
"name": "ulli",
"seconds": "23",
"difficulty": "easy",
"actions": "22"
}
给了我空的回复以及状态200 OK
。
但我在defuse_scores
表中找不到任何新记录。发生了什么事?
我尝试添加各种代码行(前三行)以显示任何错误,但页面仍为空白。
顺便说一下。获取数据有效:
http://connexo.de/defuse/defuse-api/get.php
这是我尝试使用POST存储的地方:
http://connexo.de/defuse/defuse-api/set.php
这就是我的表格:
答案 0 :(得分:2)
您的列序列已关闭且查询失败静默。为什么?由于您尝试为IP地址插入的内容为VARCHAR,因此位于name
列的位置。
使用mysqli_
API时,顺序很重要,而使用命名占位符的PDO则不关心订单顺序。
所以改变你的:
$result = $mysqli->prepare("INSERT INTO `defuse_scores` (ip, name, seconds, difficulty, actions) VALUES (?,?,?,?,?)");
$result->bind_param('ssisi', $_SERVER['REMOTE_ADDR'], $_POST['name'], $_POST['seconds'], $_POST['difficulty'], $_POST['actions']);
为:
$result = $mysqli->prepare("INSERT INTO `defuse_scores` (name, seconds, difficulty, actions, ip) VALUES (?,?,?,?,?)");
$result->bind_param('sisis', $_POST['name'], $_POST['seconds'], $_POST['difficulty'], $_POST['actions'], $_SERVER['REMOTE_ADDR']);
或者在AI列中使用空白值(有时需要),我之前已经看到过这种情况:
$result = $mysqli->prepare("INSERT INTO `defuse_scores` (id, name, seconds, difficulty, actions, ip) VALUES ('', ?,?,?,?,?)");
$result->bind_param('sisis', $_POST['name'], $_POST['seconds'], $_POST['difficulty'], $_POST['actions'], $_SERVER['REMOTE_ADDR']);
使您的查询无声地失败的另一件事是列长度不够长。