【问题标题】:Format of $_POST variables into prepared statement将 $_POST 变量格式化为准备好的语句
【发布时间】:2019-07-05 20:55:28
【问题描述】:

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

是否可以在一行中放入不同的条件?

例如,如果文本为Active,则更改为Inactive,如果文本为Inactive,则更改为Active。有可能只用一行吗?

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

【问题讨论】:

  • 您是否在该查询中执行其他任何操作,或者只是切换活动/非活动?请出示您的查询。

标签: php mysql


【解决方案1】:

如果您所做的只是在ActiveInactive 之间切换状态,那么您可以使用CASE WHEN 在单个查询中完成。

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

WHERE id = ?

【讨论】:

  • 您还可以使用通常更短的IF() 函数:IF(status='Inactive','Active','Inactive')
  • @Qirel 谢谢。我认为最好在有条件的情况下进行更新。
【解决方案2】:

以下两个都应该是合法的:

$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")

$_POST['status'] 已经是Inactive 时,将产生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 {
        ...
}

【讨论】:

  • 我可以把它和 if else 语句放在同一行吗?
  • @GuifIf :如果我正确理解您的问题,否:PHP 不会将 if ... else 语句评估为一个值; bind_param()(与所有函数一样)期望其参数列表有一组值,因此您只能使用包含值的变量或计算结果为值的表达式
  • 但是,不能放其他东西,例如:if ($_POST['status'] == 'Inactive'){ $Status = ($_POST['status'] == "Inactive" ? "Inactive" : "Active"); else...
  • 请注意,您的第二个 sn-p 会产生警告 - “只有变量应该通过引用传递” - stackoverflow.com/questions/23843383/…
  • @GuifIf : 三元运算符 (condition ? true-result : false-result) 已经是一种if ... else 语句;以您的方式将if ... else 与三元评估结合起来没有多大意义;我将编辑我的答案以说明...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多