当前位置: 首页 > 知识库问答 >
问题:

PHP PDO'SQLSTATE[HY093]:参数编号无效:未定义参数

壤驷鸿祯
2023-03-14

我已经和这个打了几天了。。。

刚连接到数据库-

    $this->sqladdimport = $this->db->prepare('INSERT INTO `importqueue`
                    (`user_id`, `service_id`, `format`, `comment`, `data`, `status`)
                VALUES (:user, :service, :format, ":commment", :file, :status)',
                 array(PDO::ATTR_EMULATE_PREPARES=>true));

叫来-

function addImportQueue($filename, $user, $format, $service_id, $comment, $status = IMPORT_NEW ){
    $fh = fopen($filename, 'r');
    if (!$fh) {
        return false;
    }

    $params = array(    ':user' => $user['user_id'],
                        ':format' => $format,
                        ':service' => $service_id,
                        ':comment' => $comment,
                        ':status' => $status) ;
    $this->sqladdimport->bindParam(':file', $fh, PDO::PARAM_LOB);
    foreach ($params as $key => &$val){
        $this->sqladdimport->bindParam($key,$val);
    }

    $this->sqladdimport->execute();
    $id = $this->db->lastInsertId();

    return $id;
}

但我只是

PHP致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY093]:无效参数编号:未定义参数”

在执行行上。

如果它是相关的,表是这样定义的:

CREATE TABLE `importqueue` (
`import_id` INT(11) NOT NULL AUTO_INCREMENT,
`service_id` INT(11) NOT NULL DEFAULT '0',
`format` INT(11) NULL DEFAULT '0',
`user_id` INT(11) NULL DEFAULT '0',
`comment` TEXT NULL,
`date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`data` MEDIUMBLOB NULL,
`status` INT(11) NULL DEFAULT NULL,
INDEX `Index 1` (`import_id`)
)
COMMENT='Import queue/archive'
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

我对PDO还比较陌生,尤其是BLOB,所以我可能在做一些很明显很愚蠢的事情,但它现在正在逃避我!

谢谢

编辑:我注意到prepare中对引号:comment的引用-这是我调试的产物,我再次删除了它们,没有任何更改。

也简化了功能

    $fh = fopen($filename, 'r');
    $this->sqladdimport->bindValue(':file', $fh, PDO::PARAM_LOB);
    $this->sqladdimport->bindValue(':user', $user['user_id']);
    $this->sqladdimport->bindValue(':format', $format);
    $this->sqladdimport->bindValue(':service', $service_id);
    $this->sqladdimport->bindValue(':comment', $comment);
    $this->sqladdimport->bindValue(':status', $status);
    $this->sqladdimport->execute();

我仍然得到相同的错误(使用bindParam或bindValue)

共有3个答案

长孙阳焱
2023-03-14

找到了......

我将代码复制到一个测试脚本中,这样我可以更容易地修改它。从一个字段(有效)开始,逐步逐个添加其余字段。

问题原来是prepare命令中的一个简单输入错误。。。指的是:通信。bind指的是:评论。我从来没有注意到额外的“m”。。

谢谢大家的建议。这是一次学习的经历!

商冠玉
2023-03-14

在双引号中只有“:commment”占位符。因此,它将被视为一个字符串

此外,如果您试图存储二进制文件,请使用

$fh = fopen($filename, 'rb');

而不是

$fh = fopen($filename, 'r');

另外,尝试为所有列定义数据类型,因为bindValue方法有第三列,默认为PDO::PARAM_STR。但也有数字列

$fh = fopen($filename, 'rb');
$this->sqladdimport->bindValue(':file', $fh, PDO::PARAM_LOB);
$this->sqladdimport->bindValue(':user', $user['user_id'],PDO::PARAM_INT);
$this->sqladdimport->bindValue(':format', $format,PDO::PARAM_INT);
$this->sqladdimport->bindValue(':service', $service_id,PDO::PARAM_INT);
$this->sqladdimport->bindValue(':comment', $comment,PDO::PARAM_STR);
$this->sqladdimport->bindValue(':status', $status,PDO::PARAM_INT);
$this->sqladdimport->execute();
周浩博
2023-03-14

请参阅关键字和保留字...

您可能需要重命名列注释日期格式状态

无效参数编号来自”:注释“未被替换,因此列数与参数数不匹配,小于1。为了向准备好的语句提供正确数量的参数,应该改为:comment

 类似资料:
  • 问题内容: 上面的代码因以下错误而失败 SQLSTATE [HY093]:参数号无效:参数未定义 虽然什么时候才执行? 这里发生了什么? 问题答案: 您收到的此错误: SQLSTATE [HY093]:参数号无效:参数未定义 是因为&中的元素数不相同或包含1个以上的元素。 如果包含多个元素,则插入操作将失败,因为query()中仅引用了1个列名 如果&不包含相同数量的元素,则由于查询期望x参数,但

  • 问题内容: 尝试运行以下功能时,出现错误“ SQLSTATE [HY093]:无效的参数号”: 我觉得这很简单,我只是没有抓住。有任何想法吗? 问题答案: 尝试: 和 文档摘录(http://php.net/manual/zh/pdo.prepare.php): 调用PDOStatement :: execute()时,对于要传递给语句的每个值,必须包含一个唯一的参数标记。您不能在准备好的语句中两

  • 问题内容: 更新 列出值时,我犯了一个小错误。我应该输入“:username”而不是“:alias”。我想这个问题的答案是谁想要的自由统治?还是删除问题? 原版的 我一直在使用Yii的活动记录模式。现在,我的项目需要为一个小事务访问另一个数据库。我以为Yii的DAO会很好。但是,我收到了一个神秘的错误。 CDbCommand无法执行SQL语句:SQLSTATE [HY093]:无效的参数编号:参数

  • 问题内容: $ fields是一个数组,打印后得到的值如下: 我从数据类中调用update函数,如下所示: 但是我得到了错误: 警告:PDOStatement :: execute():SQLSTATE [HY093]:无效的参数编号:在…文件文本中未定义参数 我检查了其他几个类似的线程,但我想这里缺少一些基本概念,因为我仍然找不到答案。据我所知,数组中有7个和7个项目,如果我定义了所有值,则可以

  • 致命错误:C:\xampp\htdocs\otakutangerang_admin\C_action.php:33堆栈跟踪:#0 C:\xampp\htdocs\otakutangerang_admin\C_action.php(33):PDO语句中出现未捕获的异常“PDOException”,并显示消息“SQLSTATE[HY093]:参数编号无效”-

  • 问题内容: 今天,我遇到了一个以前从未见过的错误(在PDO中),但是当您考虑一下时,它是显而易见的。 我收到以下错误: 我使用的查询类似于以下内容: 显然,我有更多的参数和更长的查询。 为什么会给我这个错误? 问题答案: 解决方案是显而易见的:PDO不理会注释,而是尝试绑定不存在的变量’:Z’。您不能在PDO的注释中使用参数(除非您绑定它们)。 在注释中使用问号也存在类似的错误。