【问题标题】:How to cast string boolean from MySQL to real boolean in Javascript?如何在 Javascript 中将字符串布尔值从 MySQL 转换为真正的布尔值?
【发布时间】:2021-05-03 15:14:38
【问题描述】:

我为我的 ReactJS 前端构建了一个 php 后端。

我的 mysql users 表有一个 checkedIn 列,存储为 tinyint。我正在获取它:

<?php
// ...
$getUser = "SELECT * FROM `users` WHERE `uid`=:uid AND `unique_id`=:unique_id";
$getUser_stmt = $conn->prepare($getUser);
$getUser_stmt->bindValue(':uid', $uid,PDO::PARAM_STR);
$getUser_stmt->bindValue(':unique_id', $unique_id,PDO::PARAM_STR);
$getUser_stmt->execute();
//...

在我的前端:

  useEffect(() => {
    axios
      .get(`${config.server}/api/user.php?uid=${match.params.uid}`)
      .then((result) => {
        console.log(result.data.message);
        setUser(result.data.message);
      })
      .catch((error) => console.error(error));
  }, [match.params.uid]);

我的日志给了我:

{
  "id": "5",
  "uid": "A0005",
  "unique_id": "1384773b4df62",
  "mail": "mail@test.com",
  "date_checkin": "2021-05-03 11:00:35",
  "checkedIn": "1"
}

如何修改我的后端或前端,以便在前端为 checkedIn 提供一个真正的布尔值?

我希望:

{
  "id": 5,
  "uid": "A0005",
  "unique_id": "1384773b4df62",
  "mail": "mail@test.com",
  "date_checkin": Date Mon May 03 2021 17:15:27 GMT+0200,
  "checkedIn": true
}

作为副作用:如何将 id 转换为 Number 并将时间戳转换为 Date?

【问题讨论】:

  • 在php中返回$row之前,只需使用$row['checkedIn'] = boolval($row['checkedIn']); return $row

标签: javascript php mysql reactjs


【解决方案1】:

创建一个函数convert做这些转换:

let user = `{
  "id": "5",
  "uid": "A0005",
  "unique_id": "1384773b4df62",
  "mail": "mail@test.com",
  "date_checkin": "2021-05-03 11:00:35",
  "checkedIn": "1"}`;

function convert(data){
    data["id"] = data["id"]*1;//Int
    data["checkedIn"] = !(data["checkedIn"]==='0');//Bool
    data["date_checkin"] = Date(data["date_checkin"]);//Date
    return data;
}
convert(JSON.parse(user));

注意:用户具有 JSON 格式。所以使用函数JSON.parse()将其转换为真实对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2010-09-20
    • 2017-06-03
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    相关资源
    最近更新 更多