查询:
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'
我能够更新字段没有问题。