这可能是一个愚蠢的问题,但是如果我要使用MySQLi和准备好的语句插入数据。
是否可以将一行放在不同的条件下?
例如,如果文本为Active
,请更改为Inactive
;如果文本为Inactive
,请更改为Active
。只能一行完成吗?
$Status = ($_POST['status'] == "Inactive" ? "Inactive" : "Active");
答案 0 :(得分:1)
如果您要做的只是在Active
和Inactive
之间切换状态,则可以使用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 {
...
}