這是我第一次嘗試Slim 3.我試圖做一個簡單的Web應用程序,但每當我嘗試檢索NULL/Empty請求參數時,它總是一個字符串,並試圖將值保存到數字列將導致Slim 3 - getParsedBody()錯誤的整數值:'NULL'
General error: 1366 Incorrect integer value: 'NULL' for column 'last_login' at row 1
驗證每個參數似乎是一項耗盡的任務。我想知道這是我唯一的選擇,還是有一些我錯過了。
我也試圖用私有字段保存對象到數據庫中的一些問題,所以我真的很感謝我的方法的任何意見。
表設計
CREATE TABLE `users` (
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`last_login` datetime DEFAULT NULL,
PRIMARY KEY (`user_id`)
)
用戶模型
class User implements JsonSerializable
{
private $user_id;
private $name;
private $last_login;
public function __construct($user_id = null, $name = null, $last_login = null)
{
if ($user_id !== null) $this->user_id = $user_id;
if ($name !== null) $this->name = $name;
if ($last_login !== null) $this->last_login = $last_login;
}
/**
* Getters and setters
*/
function jsonSerialize()
{
return get_object_vars($this);
}
}
UserDAO的
class UserDAO
{
public function addUser(User $user)
{
$query = $this->connection->prepare('INSERT INTO ' . TABLE_USERS . ' VALUE (:user_id, :name, :last_login)');
$result = $query->execute((array)$user->jsonSerialize());
return $result;
}
}
不調用上執行jsonSerialize()將導致
'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
我假設PDO無法訪問模式的私人領域,我可能是錯的壽。
路線
$app->post('/user/add', function (Request $request, Response $response) {
$input = $request->getParsedBody();
$userDAO = new UserDAO();
$id = $input['user_id'];
$name = $input['name'];
$last = $input['last_login'];
// Set ID as NULL to show the difference dump between ID and Last_login
$user = new User(null, $name, $last);
var_dump($input);
var_dump($user);
$userDAO->addUser($user);
});
轉儲結果
C:\wamp64\www\Rest\app\core\Routes.php:61:
array (size=3)
'user_id' => string 'NULL' (length=4)
'name' => string 'B' (length=1)
'last_login' => string 'NULL' (length=4)
C:\wamp64\www\Rest\app\core\Routes.php:62:
object(User)[59]
private 'user_id' => null
private 'name' => string 'B' (length=1)
private 'last_login' => string 'NULL' (length=4)
我想這是整個問題,如何把這字符串 'NULL'成NULL以有效的方式。
插入方法在excute上添加jsonSerialize()後工作得很好。嘗試從index.php調用addUser()並將數據插入到數據庫中。
對不起,很長的文章,但我試圖刪除很多領域的簡單而不留下任何相關的代碼。
顯示您正在執行的實際捲曲請求。這聽起來像你正在發送字符串值「NULL」而不是null。 –
@MikaTuupola這是由PhpStorm休息工具或郵遞員(Chrome擴展)處理。基本上填補領域,正如Rob在他的回覆中提到的那樣,它總是以字符串形式出現。 – Mody