これはSlim 3の最初の試みです。単純なWebアプリケーションを作成しようとしていますが、NULL /空のリクエストパラメータを取得しようとしているときは、文字列、および数値列に値を保存しようとすると、各パラメータの検証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;
}
}
私はPDOがモデルのプライベートフィールドにアクセスすることはできません、私は間違っているカントー可能性を前提と
'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
になります実行にjsonSerialize()を呼び出していません。
ルート
$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()を追加しても、insertメソッドはうまく動作します。 index.phpからaddUser()を呼び出して、データをデータベースに挿入しようとしました。
申し訳ありませんが、長いコードは残していませんが、コードを残すことなく簡単に多くのフィールドを削除しようとしました。
実際のカール要求を表示します。nullの代わりに "NULL"の文字列値を送信しているようです。 –
@MikaTuupolaこれは、PhpStormの休止ツールまたはPostman(Chrome拡張機能)によって処理されます。基本的にフィールドを埋めるために、そしてRobが彼の返答で言及したように、常に文字列として来るでしょう。 – Mody