这是我的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和this body调用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
这就是我桌子的样子:
最佳答案
列序列已关闭,查询无声失败。为什么?因为您试图为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']);
或者对有时需要的a I'd列使用空值,我以前见过这种情况:
$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']);
另一件会使查询无声地失败的事情是列长度不够长。