gpt4 book ai didi

php - PDO 在单个查询中插入数据两次

转载 作者:可可西里 更新时间:2023-11-01 06:47:47 25 4
gpt4 key购买 nike

我对 pdo 语句有一个严重的问题。我的类基于对象生成一个 SQL 查询,然后将查询和参数转发给 Bd 类并执行,但数据被插入到数据库中两次。

数据库中的表

CREATE TABLE IF NOT EXISTS `es_simple_object` (
`id_object` int(10) unsigned NOT NULL AUTO_INCREMENT,
`active` tinyint(1) NOT NULL,

PRIMARY KEY (`id_object`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

生成的查询

INSERT INTO es_simple_object (es_simple_object.id_object, es_simple_object.active) VALUES (NULL, ?)

生成的参数数组

Array
(
[0] => 1
)

调用数据库函数

static::$db = Db::getInstance();    
static::$db->_execute($sql, $params);

Bd 类(只是用于此工作的函数)

    public static function getInstance()
{
if (!isset(self::$instance))
self::$instance = new Db();

return self::$instance;
}

private function __construct()
{
$connection = 'mysql:host='.$this->server.'; port='.$this->port.'; dbname='._DB_NAME_.'; charset='._DB_CHARSET_;

try
{
$this->link = new PDO($connection, _DB_USER_, _DB_PASSWD_);
$this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $ex)
{
Tools::_catchException($ex);

exit;
}

return $this->link;
}

public function _execute($sql, $params = array())
{
try
{
$pdoStatement = $this->link->prepare($sql);
$pdoStatement->execute($params == null ? array(null) : $params);

$this->rows_affected = $pdoStatement->rowCount();
$this->rows_returned = $pdoStatement->columnCount();
$this->last_id = $this->link->lastInsertId();
$this->result = $pdoStatement;

return $pdoStatement;
}
catch (PDOException $ex)
{
Tools::_catchException($ex, array($sql, $params));

return false;
}
}

我不知道如何解决这个问题

最佳答案

当每个列约束不允许 NULL 时,为什么要尝试将 NULL 插入 id_object 列?

相反,您是否应该将 id_object 留在 INSERT 语句之外,让 MySQL 在其中添加一个新的自动增量值?

关于php - PDO 在单个查询中插入数据两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30735119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com