将$ _POST变量的格式转换为准备好的语句

时间:2019-07-05 20:55:28

标签: php mysql

这可能是一个愚蠢的问题,但是如果我要使用MySQLi和准备好的语句插入数据。

是否可以将一行放在不同的条件下?

例如,如果文本为Active,请更改为Inactive;如果文本为Inactive,请更改为Active。只能一行完成吗?

$Status = ($_POST['status'] == "Inactive" ? "Inactive" : "Active");

2 个答案:

答案 0 :(得分:1)

如果您要做的只是在ActiveInactive之间切换状态,则可以使用CASE WHEN在单个查询中进行操作。

UPDATE myTable
SET status = (CASE WHEN status = 'Inactive' THEN 'Active' 
                   ELSE 'Inactive' 
              END)

WHERE id = ?

答案 1 :(得分:0)

以下两项均应合法:

$Status = ($_POST['status'] == "Inactive" ? "Inactive" : "Active");
$stmt->bind_param("s", $Status);

$stmt->bind_param("s", ($_POST['status'] == "Inactive" ? "Inactive" : "Active"));
  

警告:此第二版本会产生“仅变量应通过引用传递” 严格标准警告。选择这种方法时,请仔细考虑您的情况。


...但是请注意,您的表情

($_POST['status'] == "Inactive" ? "Inactive" : "Active")
Inactive已经是$_POST['status']时,

将产生Inactive,这与您在问题中描述的期望行为相反。我相信你想要

($_POST['status'] == "Inactive" ? "Active" : "Inactive")

编辑1

关于您的评论问题,“但是不能添加其他内容,例如:if ($_POST['status'] == 'Inactive'){ $Status = ($_POST['status'] == "Inactive" ? "Inactive" : "Active"); else ...”,这是合法的,但没有太大意义。从字面上看,这与以下内容相同:

if ($_POST['status'] == 'Inactive') {
    if ($_POST['status'] == "Inactive") {
        $Status = "Inactive";
    } else {
        $Status = "Active";
    } else {
        ...
}