查询:
UPDATE caption_queue SET status = 'Conversion Completed' WHERE tpi_id = '3130'
如标题中所述,当我在PHP中运行它时,该值设置为空字符串。但是,当在MySQL中直接运行完全相同的查询时,它可以正常工作。
除此之外,我只在单个枚举值上获得此行为:'转换已完成'。当使用其他值(大多数也包含空格)进行更新时,没有问题。
感兴趣的人的实际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;
答案 0 :(得分:0)
感谢。
我认为如果你将名为status的列放在后面的滴答声中,你会发现它应该有效。
$query="UPDATE caption_queue SET `status` = 'Conversion Completed' WHERE tpi_id = '3130'";
答案 1 :(得分:0)
我找到了解决方法。通过使用严格模式:
SET SESSION sql_mode = 'STRICT_ALL_TABLES'
我能够毫无问题地更新字段。看起来像mysqli的某种问题。
答案 2 :(得分:0)
如果您使用的是MySQLI,并且您的数据库有枚举,则需要查找值的位置以更新数据库,因为它不接受新字符串!
这是我的数据库配置列的示例!
status enum('active', 'inactive', 'banned')
如果要更新这些值,请将这些值转换为数字,例如active = 1,inactive = 2,banned = 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();
这将节省您的一天!
此代码用作示例,以提供针对此问题的完整解决方案!