PHP更新枚举字段的值导致空字符串,但在PHPMyAdmin中运行时,相同的查询工作



查询:

UPDATE caption_queue SET status = 'Conversion Completed' WHERE tpi_id = '3130'

如标题所述,当我在PHP中运行它时,值被设置为一个空字符串。但是,当直接在MySQL中运行完全相同的查询时,它可以正常工作。

最重要的是,我只在单个enum值上得到这种行为:'转换完成'。当使用其他值(其中大多数也包含空格)更新时,没有问题。

实际PHP代码:

$sql = "UPDATE caption_queue SET status = 'Conversion Completed' WHERE tpi_id = '$tpi_id'";
$val = mysqli_query($link, $sql);
//$link comes from somewhere else, but we use it extensively throughout our website
表定义:

CREATE TABLE IF NOT EXISTS `caption_queue` (
`tpi_id` int(11) NOT NULL,
`pid` int(6) DEFAULT NULL,
`conversion_began` datetime DEFAULT NULL,
`yt_caption_id` varchar(50) DEFAULT NULL,
`yt_video_id` varchar(50) DEFAULT NULL,
`status` enum('Pending Conversion','Converting','Conversion Completed','Pending Upload','Video Processing','Video Processed','Uploading Transcription','Caption Syncing','Caption Synced','Caption Downloading','Caption Ready') DEFAULT 'Pending Conversion'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

如果你正在使用mysql并且你的数据库有枚举,你需要找到你的值的位置,以便更新你的数据库,因为它不接受新的字符串!

这里是我的数据库配置列的一个例子!

status  enum('active', 'inactive', 'banned')

如果要更新这些值,请将值转换为数字,例如active = 1, inactive = 2, prohibited = 3

在PHP中我们可以做如下操作

$query = 'UPDATE '.$this->table.' SET status = :status' 
$stmt = $this->conn->prepare($query);
if($this->status == 'active') 
    {
      $finalStatus = 1;
    }
    if($this->status == 'inactive') 
    {
      $finalStatus = 2;
    }
    if($this->status == 'banned') 
    {
      $finalStatus = 3;
    }
$stmt->bindParam(':status', $finalStatus);
$stmt->execute();

,这将拯救你的一天!

这段代码被用作示例,提供了这个问题的完整解决方案!

谢谢。

我想你会发现它应该工作,如果你把列称为状态在反勾。

$query="UPDATE caption_queue SET `status` = 'Conversion Completed' WHERE tpi_id = '3130'";

我找到了一个解决方法。使用严格模式:

SET SESSION sql_mode = 'STRICT_ALL_TABLES'

我能够更新字段没有问题。

最新更新