没有错误,状态200,但没有数据进入我的表

时间:2018-01-14 20:01:01

标签: php mysql mysqli

这是我的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

这就是我的表格:

table structure

1 个答案:

答案 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']);

使您的查询无声地失败的另一件事是列长度不够长。