首页 > 解决方案 > INSERT INTO - 子查询返回超过 1 行 (PHP/MySQL)

问题描述

我正在尝试使用 PHP 和 MySQL 开发一个网站。这是我尝试过的PHP代码:

$sql = sprintf("INSERT INTO request_boms SET
                                request_list_id = %d,
                                project_version_id = %d,
                                amount = %d,
                                user = '%s',
                                timestamp = %d",
                                $requestNo, $bomID, $amount, $_SESSION["admin_user_name"], time());
$this->db_inventory->Execute($sql);

我的$this->db_inventory变量与 DB API 连接。没有问题。但是当我在这里执行代码时,会返回这个:

Subquery returns more than 1 row
INSERT INTO request_boms SET request_list_id = 14, project_version_id = 429, amount = 1, user = 'admin', timestamp = 1607510083

我在这里(stackoverflow)上搜索了这个问题,但在所有问题中都有SELECT他们的查询中的声明。我没有在我的查询中给出任何SELECT声明。INSERT INTO怎么可能?

编辑(由于评论)

这是我的Execute()

public function Execute($sql) {
    $rs = new RecordSet($sql, $this->db_type, $this->conn);
    return $rs;
}

RecordSet

class RecordSet {
    public $rs;
    public $db_type;
    public $conn;

    public function RecordSet($sql, $db_type, $conn) {
        $this->db_type = $db_type;
        $this->conn = $conn;
        if ($this->db_type == 'sybase') {
            $rsx =@sybase_query($this->sql_escape($sql)); 
            if (!$rsx) {
                $this->queryError(sybase_get_last_message(),$sql);
            }
        } elseif ($this->db_type == 'mssql') {
            $rsx =@mssql_query($this->sql_escape($sql)); 
            if (!$rsx) {
                $this->queryError(mssql_get_last_message(),$sql);
            }
        } elseif ($this->db_type == 'odbc') {
            $rsx =@odbc_exec($this->conn, $this->sql_escape($sql)); 
            if (!$rsx) {
                $this->queryError(odbc_errormsg(),$sql);
            }
        } else {
            $rsx = mysqli_query($this->conn, $this->sql_escape($sql));
            if (!$rsx) {
                $this->queryError(@mysqli_error($this->conn),$sql);
            }
        }
        $this->rs = $rsx;
    }
}

标签: phpmysqlsqlsql-insert

解决方案


解决了!

在我的数据库中,我还有一个名为request_components. 它有 2 个主键:idrequest_list_id. 从表中删除request_list_id键后,问题解决了。似乎在表之间产生冲突。如果你有这个问题,你应该检查你的数据库。


推荐阅读