我在另一个表中获取某个字段的id时遇到问题。场景看起来像这样:我想插入表名sample_tbl
,并且在插入时它也必须具有表sample_info_tbl
的id,因为它已连接。这是我的代码:
$sql = "INSERT INTO `sample_tbl` (`file`, `path`, `references`, `date`, `sample_info_id`,`creation_date`, `created_by`) VALUES ('$file', '$path', '$references', '$date',
(SELECT sample_info_id FROM `sample_info_tbl` WHERE file_type = '$file_type' AND storage = '$storage'),
NOW(), '$created_by')";
当我运行它时,我有这样的错误:
致命错误:错误的SQL:INSERT INTO
sample_tbl
(file
,path
,references
,date
,sample_info_id
,creation_date
,created_by
) 价值观(' $ file',' $ path',' $ references',' $ date', (SELECT sample_info_id FROMsample_info_tbl
WHERE file_type =' $ file_type' AND storage =' $ storage'), 现在(),' $ created_by')&#34 ;;错误:列' sample_info_id'不能为空
我该如何解决这个问题?任何想法。感谢任何帮助。谢谢
答案 0 :(得分:0)
错误消息中最重要的部分是:
错误:列'sample_info_id'不能为空
这意味着您正在运行的此SELECT子查询不会返回任何结果:
SELECT sample_info_id FROM sample_info_tbl
WHERE file_type = '$file_type' AND storage = '$storage'
确保$file_type
和$storage
包含实际在sample_info_tbl
表中具有相应行的有效值。
答案 1 :(得分:0)
首先请发布您的表格结构(列)。 当在insert sql中使用select语句时,尝试将子查询限制为仅返回1行(您的情况),因此如果您不想抛出异常,请将LIMIT 1添加到子查询中。
您确定 $ file_type 和 $ storage 包含有效值吗?调试这些值,并尝试单独运行子查询以确定问题。