【问题标题】:Update table value based on string length or other to set a specific value根据字符串长度或其他更新表值以设置特定值
【发布时间】:2022-11-18 14:48:51
【问题描述】:

我想将表值更新为 2 个值中的任意一个。 所选值有 2 个可能的选择我骑自行车或者我驾驶飞机。如果输入的值是 I ride a bike 那么数据库值应该设置为 1 ,如果是 I fly an airplan 那么该值应该设置为 2 。 这样,当我显示/查看表格时,将根据运输的值设置为显示自行车(称为 1.png)或飞机(称为 2.png)的图像。

// get the passed variables from the web form
      
$id=$_POST['id'];     
$pid = $_POST['pid'];
$transport=$_POST['transport'];


// update data in mysql database
$sql = "UPDATE survey SET pid=?, transport=? WHERE id=?";
$stmt= $con->prepare($sql);
$stmt->bind_param("ssi", $pid, $transport, $id);
$stmt->execute();

上面的代码目前有效,但表格中显示的是 ride bike 或 fly airplane 的文字 我更喜欢简单的图像 所以我在想像使用 strlen 这样的东西,骑自行车有 15 个字符,或者飞机有 18 个

$sql = "UPDATE survey SET pid=?,if (strlen(['transport']) == 18){set '2';}else{set '1';} ,WHERE id=?"; 

但它不起作用,我不知道,因为这只是一种爱好。

【问题讨论】:

  • ,WHERE 看起来像错字。错误报告说什么?

标签: php mysqli


【解决方案1】:

您可以在 PHP 中执行此操作。

$id=$_POST['id'];     
$pid = $_POST['pid'];
$transport=$_POST['transport'];
switch(strtolower($transport)) {
    case 'i ride a bike':
        $transportValue = 1;
        break;
    case 'i fly a plane':
        $transportValue = 2;
        break;
    default:
        $transportValue = 0; // if it's something else
        break;
}

// update data in mysql database
$sql = "UPDATE survey SET pid=?, transport=? WHERE id=?";
$stmt = $con->prepare($sql);
$stmt->bind_param("ssi", $pid, $transportValue, $id);
$stmt->execute();

或者,您可以这样做:

$id=$_POST['id'];     
$pid = $_POST['pid'];
$transport=$_POST['transport'];
$str = strtolower($transport);

if ( strpos($str, 'bike') !== false ) {
    $transportValue = 1;
} elseif ( strpos($str, 'plane') !== false ) {
    $transportValue = 2;
} else {
    $transportValue = 0; // if it's something else
}

// update data in mysql database
$sql = "UPDATE survey SET pid=?, transport=? WHERE id=?";
$stmt = $con->prepare($sql);
$stmt->bind_param("ssi", $pid, $transportValue, $id);
$stmt->execute();

【讨论】:

  • 这太好了,谢谢。因此,例如,您可以使用通配符吗,意思是如果它包含单词 bike 或单词 plane 然后相应地设置他的值?
  • 那是模糊的。如果它包含两个词怎么办?
【解决方案2】:

您必须将 IF 放在值表达式中。 SQL 不是过程语言。

您还缺少要分配给的列。

UPDATE survey
SET pid = ?,
    transport = IF(LENGTH(?) = 18, '2', '1')
    WHERE id = ?

但是像这样的硬编码长度似乎容易出错——如果你有两个长度相同的值会怎样。与实际字符串进行比较。

UPDATE survey
SET pid = ?,
    transport = CASE ?
        WHEN 'I fly an airplane' THEN '2'
        ELSE '1'
    END
    WHERE id = ?

当您有两个以上的选择时,这也可以更好地概括,您可以添加更多 WHEN 子句。

您还可以使用 FIELD() 函数:

UPDATE survey
SET pid = ?,
    transport = FIELD(?, 'I fly an airplane', 'I ride a bike')
    WHERE id = ?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2012-12-08
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多