MySQLi INSERT INTO使用SELECT语句作为插入值

时间:2015-12-07 08:36:39

标签: php select mysqli insert

我在另一个表中获取某个字段的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_tblfilepath,   referencesdatesample_info_idcreation_datecreated_by)   价值观(' $ file',' $ path',' $ references',' $ date',                       (SELECT sample_info_id FROM sample_info_tbl WHERE file_type =' $ file_type' AND storage =' $ storage'),                        现在(),' $ created_by')&#34 ;;错误:列' sample_info_id'不能为空

我该如何解决这个问题?任何想法。感谢任何帮助。谢谢

2 个答案:

答案 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 包含有效值吗?调试这些值,并尝试单独运行子查询以确定问题。